力扣刷题笔记:1004.最大连续1的个数 III(滑窗法,标准滑窗模板题,重点在题意转换,详细题解代码)

题目:

1004、最大连续1的个数 III

给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。

返回仅包含 1 的最长(连续)子数组的长度。

示例 1:
力扣刷题笔记:1004.最大连续1的个数 III(滑窗法,标准滑窗模板题,重点在题意转换,详细题解代码)_第1张图片
示例 2:
力扣刷题笔记:1004.最大连续1的个数 III(滑窗法,标准滑窗模板题,重点在题意转换,详细题解代码)_第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/

你可能感兴趣的:(刷题笔记,python,leetcode)