用 Python 编写一个通过翻转 k 位来查找最长 1 集长度的程序

pythonserver side programmingprogramming

假设我们有一个二进制列表,因此这里只有 1 和 0 可用,并且我们还有另一个数字 k。我们最多可以将 k 个 0 设置为 1,我们必须找到包含所有 1 的最长子列表的长度。

因此,如果输入为 nums = [0, 1, 1, 0, 0, 1, 1] k = 2,则输出将为 6,因为我们可以将中间的两个 0 设置为 1,然后列表变为 [0, 1, 1, 1, 1, 1, 1]。

为了解决这个问题,我们将遵循以下步骤 −

  • zeros := 0, ans := 0, j := 0
  • 对于 nums 中的每个索引 i 和值 n,执行
    • zeros := zeros + (当 n 与 0 相同时为 1,否则为 0)
    • 当 zeros > k,执行
      • zeros := zeros - (当 nums[j] 与 0 相同时为 1,否则为 0)
      • j := j + 1
    • 如果 i - j + 1 > ans,则
      • ans := i - j + 1
  • 返回 ans

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

示例

class Solution:
   def solve(self, nums, k):
      zeros = 0
      ans = 0
      j = 0
      for i, n in enumerate(nums):
         zeros += n == 0
         while zeros > k:
            zeros -= nums[j] == 0
            j += 1
         if i - j + 1 > ans:
            ans = i - j + 1
      return ans
ob = Solution()
nums = [0, 1, 1, 0, 0, 1, 1]
k = 2
print(ob.solve(nums, k))

输入

[0, 1, 1, 0, 0, 1, 1], 2

输出

6

相关文章


有用资源