力扣刷题笔记:1004.最大连续1的个数 III(滑窗法,标准滑窗模板题,重点在题意转换,详细题解代码)
作者:互联网
题目:
1004、最大连续1的个数 III
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
示例 1:
示例 2:
提示:
1 <= A.length <= 20000
0 <= K <= A.length
A[i] 为 0 或 1
题解思路:
重点:题意转换。
把「最多可以把 K 个 0 变成 1,求仅包含 1 的最长子数组的长度」转换为 「找出一个最长的子数组,该子数组内最多允许有 K 个 0 」。
标准滑窗法的模板题,先定义左右指针,右指针先移动直至不满足题目条件,再拖动左指针,直至找出最长的最多允许有 K 个 0 子数组。
滑窗python模板写法:https://blog.csdn.net/weixin_44414948/article/details/113862173
题解python代码:
class Solution:
def longestOnes(self, A: List[int], K: int) -> int:
n = len(A)
left = right = 0
ans = 0
zeros = 0
while right<n:
if A[right]==0: zeros += 1
while zeros>K: # 右指针移动至不满足zeros<=K时,开始移动左指针至满足条件
if A[left]==0: zeros -= 1
left += 1 # 左指针移动,注意不能和上一句写反
ans = max(ans, right-left+1) # 更新最大长度
right += 1
return ans
作者:a-qing-ge
链接:https://leetcode-cn.com/problems/max-consecutive-ones-iii/solution/biao-zhun-hua-chuang-mo-ban-ti-zhi-jie-t-gn4b/
来源:力扣(LeetCode)https://leetcode-cn.com/problems/max-consecutive-ones-iii/
标签:数组,滑窗,int,题解,https,指针,模板,题意 来源: https://blog.csdn.net/weixin_44414948/article/details/113862992