📅  最后修改于: 2023-12-03 14:57:04.895000             🧑  作者: Mango
给定一个仅包含 0 和 1 的数组,我们最多可以将 k 个 0 翻转为 1,找出其中最长的连续 1 的个数。
既然题目中说我们最多可以将 k 个 0 翻转为 1,那我们就直接翻就行了。具体做法是:
这个做法的时间复杂度是 O(n),空间复杂度是 O(1)。
def longestOnes(nums: List[int], k: int) -> int:
n = len(nums)
left = right = 0
numZeros = k
ans = 0
while right < n:
if nums[right] == 0:
if numZeros > 0:
numZeros -= 1
right += 1
else:
if nums[left] == 0:
numZeros += 1
left += 1
else:
right += 1
ans = max(ans, right - left)
return ans
输入:
nums = [1,1,0,1,1,0,0,1,1,1]
k = 2
输出:6
解释:将第 2 和第 6 个 0 翻转成 1,我们可以得到连续的 1。
这道题是一道典型的滑动窗口问题,可以使用双指针来解决。在实现的过程中需要注意左指针和右指针的移动以及 numZeros 变量的维护。