题目:
解析:
这道题我们只要记录0的值不超过题目给的k值,就能得到它最大连续1的最大个数。
首先创建双指针left和right同时指向0下标和一个记录0次数的zero还有记录长度的len,再进入right循环(进入窗口),当遇到0值的时候,zero就+1,但zero的值超过题目中给的k值时,判断left位置的值是否等于0,如果不是left就进一步,如果是,zero就-1,left进一步。但zero的值不超过k值时(代表退出窗口),就记录下len的最长长度。
代码:
class Solution {
public int longestOnes(int[] nums, int k) {
int left=0,right=0,n=nums.length,zero=0;//创建双指针和记录k的次数
int ret=0;//返回的最长长度
for(;right<n;right++){//进入窗口
if(nums[right]==0){
zero++;
}//如果遇到0 zero就++
while(zero>k){
if(nums[left++]==0) zero--;
}//判断是否超过题目给的值,如果left的下标为0,zero就-1,每次while循环一次left就进一步
ret=Math.max(ret,right-left+1);//取最大长度
}
return ret;
}
}