
总体思路:
使用一个滑动窗口
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;
}
本文深入探讨了滑动窗口算法的应用,特别是在处理包含一定数量可转换元素的数据序列中寻找最长合法子序列的问题。通过具体代码实例,展示了如何利用滑动窗口高效地遍历数组,动态调整窗口大小以适应特定条件,如将指定数量的0转化为1,从而找到最长的全1子序列。
384

被折叠的 条评论
为什么被折叠?



