题目
https://leetcode.cn/problems/max-consecutive-ones-iii/
答案
https://leetcode.cn/problems/max-consecutive-ones-iii/solution/fen-xiang-hua-dong-chuang-kou-mo-ban-mia-f76z/
滑动窗口解决。如何写对滑动窗口代码呢?
我们将while循环内分为3个部分:
- 第一部分取当前位置的值,更新0的数量
- 第二部分若0的数量过多,缩小左边框
- 第三部分更新最大长度,并拓展右边框
每次当窗口右拓时,如果0的数量符合要求,都会执行到③,更新边框最大值。这样保证最大边框一定会被遍历到一次。
class Solution {
public int longestOnes(int[] A, int K) {
int N = A.length;
int res = 0;
int left = 0, right = 0;
int zeros = 0;
while (right < N) {
if (A[right] == 0) // ①
zeros ++;
while (zeros > K) { // ②
if (A[left++] == 0)
zeros --;
}
res = Math.max(res, right - left + 1); // ③
right ++;
}
return res;
}
}