在Python中查找K个连续的1的最小相邻交换次数的程序
假设我们有一个二进制数组nums和一个值k。在一次移动中,我们可以选择两个相邻的索引并交换它们的值。我们必须找出需要的最小移动次数,以使nums具有k个连续的1。
所以,如果输入是nums = [1,0,0,1,0,1,0,1],k = 3,那么输出将是2,因为我们可以在一次交换中将数组从[1,0,0,1,0,1,0,1]变为[1,0,0,0,1,1,0,1],然后[1,0,0,0,1,1,1,0]。
为了解决这个问题,我们将按照以下步骤进行 −
- j:= 0
-
val:= 0
-
ans:= 999999
-
loc:=新列表
-
对于nums中的每个索引i和值x,执行以下操作
- 如果x是非零的,那么
- 在loc的末尾插入i
-
m:=(j+loc大小-1)/ 2的商
-
val:= val + loc [-1] – loc [m] -(loc大小-j)/ 2的商
-
如果loc的长度 – j> k,则
-
m:=(j+loc大小)/ 2的商
-
val:= val-loc [m] – loc [j] -(loc大小-j)/ 2的商
-
j:= j +1
-
如果loc大小-j与k相同,则
-
ans:= ans和val的最小值
- 在loc的末尾插入i
- 如果x是非零的,那么
-
返回ans
示例
让我们看一下以下实现,以获得更好的理解