1004. 最大连续1的个数 III

1004. 最大连续1的个数 III

给定一个由若干 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。

 

 

解题

  • [ l e f t , r i g h t ] [left,right] 表示窗口,移动right 遍历数组
  • right = 1 时,++right
  • right = 0 时,0的数量小于K时,++right
  • right = 0 时,0的数量等于K时,为了容纳 right 处的0,left 移动过一个0 时,才可以容纳下 right 处的0

代码:

class Solution {    //C++
public:
    int longestOnes(vector<int>& A, int K) {
        int left = 0, right, maxlen = 0;
        for(right = 0; right < A.size(); ++right) 
        {
            if(A[right]==0)
            {
                if(K == 0)
                {
                    while(A[left] == 1)//等于0退出
                        ++left;
                    ++left;//退出了一个0
                }
                else//k不为0,0变成1的数量还没满
                {
                    --K;
                }
            }    
            maxlen = max(maxlen,right-left+1);
        }
        return maxlen;
    }
};

 

因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13881525.html

原文地址:https://www.cnblogs.com/BlairGrowing/p/13881525.html