最大连续的1的个数. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/max-consecutive-ones-iii/
乍一看,这道题很奇怪,什么叫最多翻转k个0?
我们转变一下思维,把翻转k个0,当成滑动窗口中,最多存在的0的个数不超过k,是不是就很好理解了?
此时若k为2,那么right所在的位置,就是有三个0的时候。我们让left左移,left的位置遇到0的时候,也就是left和right的中间只有两个0的时候,此时right重新向右移动。如此循环往复,直到right最终到数组的最右边停下来。
代码:
class Solution {
public int longestOnes(int[] nums, int k) {
int left = 0;
int right = 0;
int zero = 0;
int ret = 0;
for(right = 0; right < nums.length; right++){
if(nums[right] == 0){
zero++;
}
while(zero > k){
if(nums[left++] == 0){
zero--;
}
}
ret = Math.max(ret , right - left + 1);
}
return ret;
}
}