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

时间:2019-07-01 09:16:30

标签: 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,c,c]
exp o/p : not possible

1 个答案:

答案 0 :(得分:4)

  1. 检查它们是否为n == m + 1n == m是否为真。
  2. 如果不是这种情况,那就不可能了,return
  3. 如果n == m + 1,我们知道在所有偶数索引上都必须有一个n,对于所有奇数索引,都必须有一个m
  4. 编辑:如果n == m的起始值很重要!如果交换次数是算法中最重要的部分,请对两个可能的变体都运行步骤5,并比较所得子数组的长度。 [1] ,谢谢@Ishpreet指出这一点!
  5. 遍历数组,检查是否有nm。如果相应索引的值不正确(例如,在索引0上存在m而不是n,请注意,在数组中向下放置错误放置的n's或{{ 1}}。
  6. 然后,根据两个子数组交换数组中记下的索引值。
  

[C,C,C,C,D,D,D,D]

     

错误的C = [1,3]

     

错误的D = [4,6]

     

交换(1,4)和(3,6)

     

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

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