在Python中找出可以翻转为0的所有列表项并计数的程序

在Python中找出可以翻转为0的所有列表项并计数的程序

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

现在考虑有一种操作,我们翻转长度为k的子列表,使所有1都成为0,所有0都成为1。我们必须找到将nums更改为所有1到0所需的最小操作次数。如果我们无法更改它,则返回-1。

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

要解决此问题,我们将按以下步骤执行以下操作:

  • n:= nums的大小

  • res:= 0,翻转:= 0

  • to_conv:=大小为n的列表,并填充为0

  • 对于i在0到n之间的范围,执行以下操作

    • flipped:= flipped XOR to_conv [i]

    • cur:= nums [i]

    • cur:= cur XOR flipped

    • 如果cur与1相同,则

      • flipped:= flipped XOR 1

      • res:= res + 1

      • 如果i + k-1> = n,则

      • 返回 -1

      • 如果i + k

      • to_conv [i + k]:= 1
  • 返回res

范例

让我们查看以下实现以更好地理解 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程