【LeetCode 75】第十六题(1004)最大连续1的个数

目录

题目:

示例:

分析:

代码+运行结果:


文章来源地址https://uudwc.com/A/X3A0P

题目:

示例:

分析:

给一个只有0和1的数组,可以将K个0变成1,问最大能得到的全是1的子数组的长度是多少。

这算是很经典的滑动窗口题了。

我们定义左右指针,只不过一开始都在数组的开头,然后我们不断右移右指针,如果右指针遇到0,则将K减1,如果K不够减,那么我们就开始计算左右指针包括的范围,然后记录下最大的连续为1的子数组长度。

当K减完,并且右指针还没有走到数组末尾,我们就开始左移左指针,直到左指针指向了0,我们就将K再加回去,表示我们没有将此刻左指针指向的0变为1,因此K的大小我们加一再加回去。

如此循环直到右指针指向了数组末尾,我们也就遍历完成了。

代码+运行结果:

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        int l=0;int r=0;
        int res=k;
        while(r<nums.size()){
            if(nums[r]==1) r++;
            else if(k>0){
                k--;r++;
            }else{
                res=max(res,r-l);
                while(nums[l]==1){
                    l++;
                }
                k++;l++;
            }
        }
        res=max(res,r-l);
        return res;
        //暴力超时 也算是提供一种思路,就不删了放在这里
        // int res=k;
        // int tk=k;
        // int temp=0;
        // for(int l=0;l<nums.size()-k;l++){
        //     temp=0;
        //     tk=k;
        //     for(int r=l;r<nums.size();r++){
        //         if(nums[r]==1) ++temp;
        //         else if(tk>0){
        //             --tk;++temp;
        //         }else{
        //             break;
        //         }
        //     }
        //     res=max(res,temp);
        // }
        // return res;
    }
};

原文地址:https://blog.csdn.net/m0_63235356/article/details/131775651

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年08月01日 13:30
Django Rest_Framework(一)
下一篇 2023年08月01日 13:30