- 最大连续1的个数 III
本道题目和424. 替换后的最长重复字符基本上思路是一致的,并且由于是只有0和1在数组中,这道题目就相对简单一些。 步骤:
- 右指针不断右移,如果遇到0,就记录对于0的counter++。
- 根据0的counter是否超过k来决定移动左指针。如果超过k,那么移动左指针,直到break掉超过k的这种情景。
- 统计长度。
class Solution {
public int longestOnes(int[] nums, int k) {
if (k >= nums.length) {
return nums.length;
}
int l = 0;
int r = 0;
// 记录当前窗口中0的个数,如果超过k个,那么移动左指针
int countZero = 0;
int res = 0;
while (r < nums.length) {
if (nums[r] == 0) {
countZero++;
}
// 如果超过k个,那么移动左指针
while (countZero > k) {
if (nums[l] == 0) {
countZero--;
}
l++;
}
res = Math.max(res, r - l + 1);
r++;
}
return res;
}
}