• 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

  • 相关阅读:
    Java学习
    机器学习
    机器学习
    Java 学习
    哈希表复习
    [转] 数据库设计步骤
    Java
    c++的函数重载-笔记
    进程与线程-笔记
    内存知识-笔记
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13881525.html
Copyright © 2020-2023  润新知