总体思路:
使用一个滑动窗口
int longestOnes(vector<int>& A, int K) {
if(A.empty())
return 0;
int size=A.size();
int left=0;//left指向当前字符串的开始位置
int right=0;//right指向当前字符串结尾的下一个位置
int maxVal=0;
int count=K;
while(right<size){
//A[right]为1,尾部指针直接向右移动
if(A[right]==1)
++right;
else{
//A[right]为0
//如果有将0改成1的机会,则将0变成1,尾部指针向右移动
if(count>0){
--count;
++right;
}
//如果没有改数字的机会,就要将头部指针向右移动
else{
//如果A[left]==0,那么可以收回一次改数字的机会
if(A[left]==0)
++count;
++left;
}
}
if(maxVal<right-left)
maxVal=right-left;
}
return maxVal;
}