问题描述:给定一个由若干个0和1组成的数组A,我们最多可以将K个值从0变为1,返回仅包含1的最长(连续)子数组的长度。
求解思路:使用滑动窗口解决,只要当前滑动窗口内的0的数量小于等于k,则往前移动,并更新子数组的长度,如果遇到0的数量大于k,就一直在左边进行删除,直到遇到0为止,表述除去一个0.
public int continuebit(int[]nums,int k)
{
int begin=0;
int end=0;
int maxLength=0;
int length=0;
int zeroNumber=0;
for(int i=0;i<nums.length;i++)
{
if(nums[i]==1)
{
end++;
length++;
}else
{
if(zeroNumber<k)
{
end++;
length++;
}else
{
maxLength=Math.max(maxLength,length);
for(int i=begin;i<end;i++)
{
if(nums[i]==0){length--;begin++;break;}
else{length--;begin++;}
}
}
}
}
return maxLength;
}