zoukankan      html  css  js  c++  java
  • leetcode 1004最大连续1的个数

    给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 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。
    输入: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。

    提示:

    1. 1 <= A.length <= 20000
    2. 0 <= K <= A.length
    3. A[i] 为 0 或 1 

    方法一:二分

      因为0的个数是依此递增的,所以我们可以枚举区间i,j这个区间内0的个数要小于K

    class Solution {
    public:
        int cnt[20000+10];
        int longestOnes(vector<int>& A, int K) {
            for (int i=1;i<=(int)A.size();++i){
                cnt[i]=cnt[i-1]+(A[i-1]==0);
            }
            int res=0;
            for (int i=1;i<=(int)A.size();++i){
                int l=i,r=(int)A.size(),ans=0;
                while (l<=r){
                    int mid=l+((r-l)>>1);
                    if (cnt[mid]-cnt[i-1]<=K){
                        l=mid+1;
                        ans=mid-i+1;
                    }
                    else r=mid-1;
                }
                res=max(res,ans);
            }
            return res;
        }
    };

    方法二:双指针

    class Solution {
    public:
        int longestOnes(vector<int>& A, int K) {
            int l=0,r=0,ans=0,change=0;
            for(int i=0;i<A.size();i++){
                if(A[i]==0){
                    if(change<K){
                        change++;
                        r++;
                    }
                    else{
                        while(l<=r&&A[l]!=0)
                            l++;
                        l++;
                        r++;
                    }
                }
                else
                    r++;
                ans=max(ans,r-l);
            }
            return ans;
        }
    };
  • 相关阅读:
    Eth-Trunk 技术
    MSTP技术
    STP生成树原理及不足
    表示数值的字符串(python)
    字符流中第一个不重复的字符(python)
    连续子数组的最大和(python)
    和为S的两个数字(python)
    数组中重复的数字(python)
    构建乘积数组(python)
    idea中查看类层级class hierarchy
  • 原文地址:https://www.cnblogs.com/flightless/p/10466185.html
Copyright © 2011-2022 走看看