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;
        }
    };
  • 相关阅读:
    openlayers方法总结
    AJAX 数据库实例
    AJAX 请求服务器
    得到XMLHttpRequest对象
    AJAX 简介
    AJAX 服务器端的脚本
    HTTP GET 最多发送100个字符
    AJAX XMLHttpRequest 对象
    Dictionary、ArrayList、Hashtable和数组 Array 的区别
    AJAX 请求实例
  • 原文地址:https://www.cnblogs.com/flightless/p/10466185.html
Copyright © 2011-2022 走看看