zoukankan      html  css  js  c++  java
  • Leetcode1004. 最大连续1的个数 III

    1004. 最大连续1的个数 III

    Difficulty: 中等

    给定一个由若干 01 组成的数组 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。
    

    提示:

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

    Solution

    思路:滑动窗口。窗口中的元素都是可以通过翻转n次(n<K)转化为1的连续子串。因此,设置一个窗口,当进入窗口的元素为1时,窗口长度加1。当进入窗口元素为0时,先判断能不变成1,若可以那么窗口长度还是加1;否则,就将窗口进行平移。最后窗口当长度就是最大的连续1的子串长度。

    Language: java

    ​ class Solution {
        public int longestOnes(int[] A, int K) {
            int numOfZero=0, left=0, right=0;
            while(right < A.length){
                if(A[right++] == 0) numOfZero++;
                if(numOfZero > K && A[left++] == 0) numOfZero--;
            }
            return right - left;
        }
    }
    
  • 相关阅读:
    BZOJ3631 [JLOI2014] 松鼠的新家
    HDU
    HDU
    HDU
    二分图求最大独立集模板
    HDU
    HDU
    HDU
    Codeforces 1197F Coloring Game 矩阵快速幂 (看题解)
    HDU
  • 原文地址:https://www.cnblogs.com/liuyongyu/p/14416234.html
Copyright © 2011-2022 走看看