在做题中学习(45):最大连续1的个数III

1004. 最大连续1的个数 III - 力扣(LeetCode)在做题中学习(45):最大连续1的个数III_第1张图片

解法:同向双指针————“滑动窗口”

思路:因为要返回数组中连续的数,就相当于一个子数组,而要的是一个可以翻转 <=  k个0的子数组使它可以变为全1的子数组,那就可以把问题转为:找出一个最大的子数组,它里面有<=k个0.

因此一定要定义一个计数器记录0的个数。

在做题中学习(45):最大连续1的个数III_第2张图片

通过上图,可以看到当right进窗口到此位置时,子数组中0的个数 > k ,所以需要通过left出窗口来维持0的数量

1.left = 0,right = 0

2.进窗口————1就略过,0就计数器++

3.判断————0的个数>k

4.出窗口+再次判断————0就略过,1就left++

5.更新数据————选出更大的len

class Solution 
{
public:
    int longestOnes(vector& nums, int k) 
    {
        int zcount = 0,len = 0;
        int z = 0;
        for(int left = 0,right = 0;rightk)
            {
                //3.出窗口
                if(nums[left]==1)
                {
                    left++;
                }
                else
                {
                    zcount--;
                    left++;
                }
            }
            //4.更新数据
            len = max(len,right - left + 1);
            right++;
        }
        return len;
    }
};

你可能感兴趣的:(学习,c++,算法,leetcode,滑动窗口)