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;
    }
}
原文地址:https://www.cnblogs.com/liuyongyu/p/14416234.html