最大连续1的个数

思路
1、设置一个左下标指针l,开始时指向下标0;
2、设置剩余可将0转换为1的个数,初始值为k;
3、变量数组中元素,如果nums[i] == 1,那么继续右移动;
如果nums[i] == 0,分两种情况(1)surplus > 1,即是可以将0变为1,那么i继续右移,surplus--;
(2)如果surplus < 1, 循环让l右移,直到找到nums[l] == 0,即是最左边进行0变1的地方,i和l都右移。
4、每一次i移动的时候都记录下,当前最大的长度。
int longestOnes(vector<int>& nums, int k) {
int sz = nums.size();
int l = 0;
int surplus = k;
int max_num = 0;
for (int i = 0; i < sz; ++i) {
if(0 == nums[i]) {
while(surplus < 1) {
if(0 == nums[l]) {
surplus++;
}
l++;
}
surplus--;
}
int bar = i - l + 1;
max_num = std::max(max_num, bar);
}
return max_num;
}

浙公网安备 33010602011771号