寻找最少数量的掉期,以“排序” 1和0的圆形数组

时间:2018-12-03 19:00:32

标签: arrays algorithm

例如,给出了一个数组10110001101110,程序需要查找的交换次数最少,因此它们必须全部为1。在这种情况下,通过交换3-> 14和4-> 10将为2。对于圆形数组,我的意思是环绕的数组,例如1100001111将被视为已排序。

我正在努力的事情是找到一种有效的算法来计算它。我首先尝试将这个数组转换为另一个由长度相同的字符串组成的数组。例如,开始时给出的数组将变为11232131。我注意到该数组始终具有偶数个元素,但是我真的不知道如何处理所有这些元素,或者这是否是解决此问题的一个好的开始

1 个答案:

答案 0 :(得分:2)

  1. 计算1s的总数。假设 m 为该数字
  2. 找到长度为 m 的连续区域,其中长度最大为1s
  3. 该区域中的0数是所需的最小交换次数。每次交换将1移至该区域,将0移至其余区域。