滑动窗口首先定义
int l=0,r=0;
然后r一定每次循环都要往后移一位,至于左窗口,我们在内部考虑,需要左窗口移动的时候,我们在一次循环内,直接移动到可以的位置,然后再计算,r++;
while(r<len){ count+=arr[r]; while(不满足条件的时候){ l++; count-=arr[l]; } 计算; r++; }
总而言之,没次进来需要加arr[r],然后对于窗口条件不满足需要移动左边界的,我们在一个while内直接搞完,最后r++;
就是每次循环一次,r一定++了一次。
实例:
LC1004:给定一个由若干 0
和 1
组成的数组 A
,我们最多可以将 K
个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
public int longestOnes(int[] A, int K) { int res=0,l=0,r=0; while(r< A.length){ if(A[r]==0){ if(K>0){ K--; } else{ res=res>(r-l)?res:(r-l); while(A[l++]==1); } } r++; } res=res>(r-l)?res:(r-l); return res; }