【LeetCode刷题(中等程度)】1004. 最大连续1的个数 III

  • Post author:
  • Post category:其他


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

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

示例 1:

输入:A = [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:

输入:A = [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。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/max-consecutive-ones-iii

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:使用滑动窗口,统计窗口中0的个数,如果没有大于k,则可以继续向右扩大,如果大于k,则左边要进行缩小,

class Solution {
public:
    int longestOnes(vector<int>& A, int K) {
        int left = 0;
        int right = 0;
        int count = 0;
        int ans = 0;
        while(right < A.size())
        {
            if(A[right] == 0)//继续扩张
                ++count;
            if(count > K)//准备缩小
            {
                if(A[left] == 0)//左边也是0 那么0的数量减少
                    --count;
                ++left;
            } 
            ans = max(ans,right - left + 1);//统计区间长度
            ++right;
            
        }
        return ans;
    }
};



版权声明:本文为qq_33197518原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。