中等滑动窗口前缀和数组
PROBLEM / 研究生阶段
1004. 最大连续1的个数 III
给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。
示例 1:
输入: nums = 1,1,1,0,0,0,1,1,1,1,0, K = 2 输出: 6 解释: 1,1,1,0,0,1,1,1,1,1,1 粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
输入: nums = 0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1, K = 3 输出: 10 解释: 0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1 粗体数字从 0 翻转到 1,最长的子数组长度为 10。
提示:
1 <= nums.length <= 105nums[i]不是0就是10 <= k <= nums.length
参考解法
下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。
python
class Solution(object):
def longestOnes(self, nums, k):
count0 = 0
max_len = 0
left = 0
for right in range(len(nums)):
if nums[right] == 0: # 右指针遇到0
count0 += 1
while count0 > k: # 数量超过k收缩左指针
if nums[left] == 0:
count0 -= 1
left += 1
current_len = right - left + 1
max_len = max(max_len, current_len)
return max_len
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
YOUR SOLUTION1004. 最大连续1的个数 III