LeetCode 1004.最大连续1的个数

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

LeetCode 1004.最大连续1的个数_第1张图片

题目解析

硬往题目介绍上边去想的话其实非常困难,如果换种方式思考就会简单许多。

若我们将思想转化为,找出最长的子串(里面含有的0的数量最大为k),然后返回其最长长度。

这样思路就清晰了许多,那么我们使用一个zero变量来记录0的个数,利用滑动窗口思想来解决,若当前进窗口的值是0那么zero++,若出窗口的该值是0那么zero--,保证zero<=k即可。 

代码

class Solution 
{
public:
    int longestOnes(vector& nums, int k) 
    {
        int n=nums.size();
        int ret=0;
        for(int left=0,zero=0,right=0;rightk)
            {
                // 出窗口
                if(nums[left]==0)
                zero--;
                // 更新窗口
                left++;
            }
            // 更新结果
            ret=max(ret,right-left+1);
        }
        return ret;
    }
};

你可能感兴趣的:(算法练习,leetcode,算法)