Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 所需的最低操作_Algorithm_Data Structures - Fatal编程技术网

Algorithm 所需的最低操作

Algorithm 所需的最低操作,algorithm,data-structures,Algorithm,Data Structures,我在最近的一次采访中发现了这一点 我们有两个整数数组,我们需要检查第一个数组是否可以转换为第二个数组。唯一允许的操作如下:从第一个数组中选取任意3个相邻元素并右旋转它们,即{a,b,c}=>{c,a,b}。我们可以多次应用此操作 我尝试过递归解决方案,但我需要更好的方法。 在我的递归解决方案中,我试图通过从左侧找到第二个数组的第一个元素的最近位置并进行所需的操作数,使第二个数组的第一个元素等于第一个数组的元素。所以,当第一个元素匹配时,我对数组的其余部分进行递归调用。 i、 设a={1,2,3,

我在最近的一次采访中发现了这一点

我们有两个整数数组,我们需要检查第一个数组是否可以转换为第二个数组。唯一允许的操作如下:从第一个数组中选取任意3个相邻元素并右旋转它们,即{a,b,c}=>{c,a,b}。我们可以多次应用此操作

我尝试过递归解决方案,但我需要更好的方法。 在我的递归解决方案中,我试图通过从左侧找到第二个数组的第一个元素的最近位置并进行所需的操作数,使第二个数组的第一个元素等于第一个数组的元素。所以,当第一个元素匹配时,我对数组的其余部分进行递归调用。 i、 设a={1,2,3,4}和b={4,1,3,2}。我们需要将数组a转换为b。 因此,{1,2,3,4}=>{1,4,2,3}=>{2,1,4,3}=>{4,2,1,3},并且作为a[1]=b[1],对2进行递归调用,使其返回n

如何解决这样的问题?提前谢谢

我们可以多次应用此操作

但是你的头衔说明了别的事情

因此,给定大小为N的两个字符串S1和S2,其中字符串中的不同字母计数相同,则只有我们可以考虑转换。
我们可以匹配从1到N-2的所有字符 在所有情况下,在两个字符串中。 每次我们从第一个字符串中选择一个字符时,该字符的移动都可以
-2+1-2+1-2+1………

我们可以将拾取的字符以字符串形式移回这些位置
-2,-1,-3,-2,-4,-3….

匹配N-2个字符后
如果最后两个字符是匹配的,那么我们已经转换了字符串,但是它们没有自动匹配,那么我们就不能再做任何事情了。
所以问题在于最后两个角色,我们不能用两个角色的动作做任何事情

例如
S1=abdc
S2=abcd
我们不能在这里将abdc更改为abcd,因为从abdc我们只能转到24个排列中的12个排列
abdc、dabc、acbd、bdac、dcab、bacd、adcb、bcda、dbca、cbad、cadb、cdba

通过计算倒数获得最佳快速答案

int invcount=0,charcount[26]={0};
for(i=0;i<s.size();i++)
{
   for(j=s[i];j<='z';j++)
   invcount+=charcount[j-s[i]];
   charcount[s[i]-'a']++;
}
cout<<invcount;
实际上,它与字符串中的反转数有关
如果两个字符串中的倒数都是偶数或奇数,则只能进行变换

在字符串中查找倒数

int invcount=0,charcount[26]={0};
for(i=0;i<s.size();i++)
{
   for(j=s[i];j<='z';j++)
   invcount+=charcount[j-s[i]];
   charcount[s[i]-'a']++;
}
cout<<invcount;
int invcount=0,charcount[26]={0};

对于(i=0;i在问题中描述递归解。好的,我已经添加了递归解。有三个元素,有六种可能的顺序[abc,acb,bac,bca,cab,cba]。其中三种可以解决[abc,bca,cab],三种不能解决[acb,bac,cba]。无法求解的是通过交换两个元素形成的,例如,
acb
是通过交换
b
c
形成的。因此,解决方法是计算数组中的交换数。如果交换数是奇数,那么数组就无法求解。请您用一个示例测试用例解释一下??您的确切意思是什么通过计算交换的数量?我们知道我们可以很容易地检查最后2个字符。但是,有没有更好(有效)的方法来获得这2个字符的顺序而不进行任何操作?只需要检查是否可能,并且给定的约束对于获得TLE来说非常大。