最大连续1的个数 三 窗口大小固定,逻辑连续但实际上并不连续的滑动窗口
1004 最大连续1的个数 三 窗口大小固定,逻辑连续但实际上并不连续的滑动窗口
题目描述
给定一个由若干 0
和 1
组成的数组 A
,我们最多可以将 K
个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
题目解析
需要最多变化K
个值使连续的子数组长度最大,由题目可以知道,将0
变为1
且这些本改变的0
一定是间隔连续的(假设i,j位置上的0变为了1,那么它们之间一定不存在0)。换句话说,就是求一个滑动窗口内包含0个数不超过K个,求这个滑动窗口的最大宽度
题目特征
- 求窗口的大小
- 窗口是逻辑连续而不是实际连续的
- 收缩条件窗口内的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;
}
}
内容来自博客园,拒绝爬虫网站