程序对最小k长度子列表进行计数,可以将其翻转以使列表中的所有项在Python中变为0

假设我们有一个称为nums的数字列表,存储了0和1。我们还有另一个值k。

现在考虑有一个操作,我们翻转一个长度为k的子列表,以使所有1均为0,所有0均为1。我们必须找到将num变为全1到0所需的最少操作数。如果我们不能更改它,则返回-1。

因此,如果输入像nums = [1,1,1,0,0,1,1,1,1],k = 3,则输出将为2,因为我们可以将前三个数字翻转为零,然后将最后三个数字翻转为零。

例 

让我们看下面的实现以更好地理解-

class Solution:
   def solve(self, nums, k):
      n = len(nums)
      res = 0
      flipped = 0
      to_conv = [0] * n
      for i in range(n):
         flipped ^= to_conv[i]
         cur = nums[i]
         cur ^= flipped
         if cur == 1:
            flipped ^= 1
            res += 1
            if i + k - 1 >= n:
               return -1
            if i + k < n:
               to_conv[i + k] = 1
      return res
ob = Solution()
nums = [1,1,1,0,0,1,1,1]
k = 3
print(ob.solve(nums, k))

输入值

[1,1,1,0,0,1,1,1], 3
输出结果
2