最大连续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;
    }
posted @ 2021-07-12 10:52  cyssmile  阅读(43)  评论(0)    收藏  举报