假设我们有一个二进制列表,那么这里只有1和0可用,我们还有另一个数字k。我们最多可以将k 0设置为1s,我们必须找到包含所有1的最长子列表的长度。
因此,如果输入类似于nums = [0,1,1,0,0,1,1] k = 2,则输出将为6,因为我们可以将两个中间的0设置为1,然后列表变为[0,1,1,1,1,1,1]。
为了解决这个问题,我们将遵循以下步骤-
零:= 0,ANS:= 0,j:= 0
对于以数字为单位的每个索引i和值n
回答:= i-j + 1
零:=零-(当nums [j]与0相同时为1,否则为0)
j:= j + 1
零:=零+(当n等于0时为1,否则为0)
当零> k时
如果i-j + 1> ans,则
返回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