题目:
给定一个二进制数组 nums
和一个整数 k
,如果可以翻转最多 k
个 0
,则返回 数组中连续 1
的最大个数 。
这道题,是典型的滑动窗口。思路还是比较清晰。
我们就是从头开始遍历,找到每一个最长的长度。这道让我们返回最长的,那么在找下一个,以它为首的窗口时,我们就可以直接以当前最大的窗口进行寻找就可以了。
代码如下:
public int longestOnes(int[] nums, int k) {
int len=nums.length;
int l=0,r=0;//定义的左右边界
int tem=0,res=0;//res是最后的返回结果,也是当前最大的窗口值,tem用于记录当前窗口1的个数
while(r<len)
{
//0 0 0 1
if(nums[r]==1)
{
tem++;
}
res=Math.max(res,tem+k);
if(r-l+1>res)//当前窗口容不下时
{
if(nums[l]==1)
{
tem--;
}
l++;
}
r++;
}
return res>len?len:res;//例如 0 0 0 1 ,当K是4时,能维持的最大窗口为5,但数组最大为4
}
记录一下,希望帮助到你!