最大连续1的个数 三 窗口大小固定,逻辑连续但实际上并不连续的滑动窗口

1004 最大连续1的个数 三 窗口大小固定,逻辑连续但实际上并不连续的滑动窗口

题目描述

给定一个由若干 01 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。

返回仅包含 1 的最长(连续)子数组的长度。

题目解析

需要最多变化K个值使连续的子数组长度最大,由题目可以知道,0变为1且这些本改变的0一定是间隔连续的(假设i,j位置上的0变为了1,那么它们之间一定不存在0)。换句话说,就是求一个滑动窗口内包含0个数不超过K个,求这个滑动窗口的最大宽度

题目特征

  1. 求窗口的大小
  2. 窗口是逻辑连续而不是实际连续的
  3. 收缩条件窗口内的0个数超过K

题目解答

class Solution {
    public int longestOnes(int[] A, int K) {
 		int sw = 0,len , res,l=0;
        len = A.length;
        for(int r =0 ; r < len ; r++){
            if(A[r] == 0)
                sw++;
            while(sw > K)/*这里进行连续的收缩*/{
                //这里等于跳过1的部分直接到0
                if(A[l] == 0){
                    sw--;
                }
                l++;
            }
            res = Math.max(res,r-l+1);
        }
        return res;
    }
}
posted @ 2019-06-04 10:03  随风而行-  阅读(217)  评论(0编辑  收藏  举报