Arrays 确保相邻位置没有两只猫或狗所需的最小交换次数

Arrays 确保相邻位置没有两只猫或狗所需的最小交换次数,arrays,algorithm,data-structures,Arrays,Algorithm,Data Structures,我们得到一个数组,数组中的元素表示猫和狗。我们必须通过交换来重新排列元素,这样就不会有两只猫或狗在相邻的位置 注意:我们可以将数组的一个元素与任何元素交换 Eg: given input: [d,c,d,c,c] exp o/p: 2 Explanation : step 1: swap index-0 and index-1 =>[c,d,d,c,c] step 2: swap index2 and index-3 =>[c,d,c,d,c] input: [c,d,d,c,

我们得到一个数组,数组中的元素表示猫和狗。我们必须通过交换来重新排列元素,这样就不会有两只猫或狗在相邻的位置

注意:我们可以将数组的一个元素与任何元素交换

Eg: given input: [d,c,d,c,c]
exp o/p: 2
Explanation : 
step 1: swap index-0 and index-1 =>[c,d,d,c,c]
step 2: swap index2 and index-3  =>[c,d,c,d,c]

input: [c,d,d,c,c,c]
exp o/p : not possible
检查它们是否为n==m+1或n==m是否为真。 如果不是这样,就不可能返回。 如果n==m+1,我们知道在所有偶数指数上必须有一个n,对于所有奇数指数必须有一个m。 编辑:如果n==m,则起始值很重要!如果交换的数量是算法最重要的部分,则对两种可能的变化运行步骤5,并比较结果子阵列的长度。[1] 感谢@Ishpreet指出这一点! 遍历数组,检查是否存在n或m。如果各个索引的值错误,例如,在索引0上有一个m而不是n,请注意,数组中的索引向下,表示错误放置的n或m。 然后,基于两个子数组交换数组中写下的索引值。 [C,C,C,C,D,D,D,D]

错误的C=[1,3]

错误的D=[4,6]

Swap1,4和3,6

结果:[C,D,C,D,C,D,C,D]

[1] 算法的复杂性不会因此而改变

检查它们是否为n==m+1或n==m是否为真。 如果不是这样,就不可能返回。 如果n==m+1,我们知道在所有偶数指数上必须有一个n,对于所有奇数指数必须有一个m。 编辑:如果n==m,则起始值很重要!如果交换的数量是算法最重要的部分,则对两种可能的变化运行步骤5,并比较结果子阵列的长度。[1] 感谢@Ishpreet指出这一点! 遍历数组,检查是否存在n或m。如果各个索引的值错误,例如,在索引0上有一个m而不是n,请注意,数组中的索引向下,表示错误放置的n或m。 然后,基于两个子数组交换数组中写下的索引值。 [C,C,C,C,D,D,D,D]

错误的C=[1,3]

错误的D=[4,6]

Swap1,4和3,6

结果:[C,D,C,D,C,D,C,D]


[1] 算法的复杂性不会因此而改变。

如果您可以将一个元素与任何其他元素交换,则问题非常简单,您可以很容易地找到它。如果你只能和一个相邻的元素交换,这会稍微困难一些,就像你在第一个例子中所做的那样。如果你可以和任何一个元素交换一个元素,这个问题很简单,你可以很容易地找到它。如果你只能和一个相邻的元素交换,这会稍微困难一些,就像你在第一个例子中所做的那样。你仍然需要比较placementseven和odd。类似于CDCC阵列的情况。预期的阵列可以是DCDC或CDCD。所以你必须比较两者,找出哪一个需要最少的交换次数。@assoron,在没有实际交换的情况下,有可能预测最小交换次数吗?这取决于你预测的意思吗?你需要一些关于元素数量和位置的信息来做出预测,所以我不知道在第6步之前,你会如何删掉上面的任何一个步骤,第6步是交换本身。你仍然需要比较位置7和奇数。类似于CDCC阵列的情况。预期的阵列可以是DCDC或CDCD。所以你必须比较两者,找出哪一个需要最少的交换次数。@assoron,在没有实际交换的情况下,有可能预测最小交换次数吗?这取决于你预测的意思吗?你需要一些关于元素数量和位置的信息来做出预测,所以我不知道在第6步之前,你会如何删掉上面的任何一个步骤,也就是交换本身。