Leetcode每日刷题之1004.最大连续1的个数|||(C++)

1.题目解析

本题的目的是找出能最多翻转k个0的情况下最长连续的1的个数,并且这是一个二进制数组,只存在0和1,翻转0就是将0变为1

2.算法原理

首先我们想到的一定是暴力枚举,即依次列举出在最多翻转k个0的情况下所有连续1的子数组的长度,求出最大值,这样的时间复杂度会很高,所以我们可以换一个思路,即找出子数组满足其中的0的个数小于k,此时我们直接求该子数组的长度就代表了连续1的个数,此时只要求出一个子数组其中含有0的个数zero<k且是满足该条件的最长子数组即可

这里我们用到的是"滑动窗口"来解决问题,即固定一个指针left后移动right指针并统计right指针遇到0的个数,此时就是入窗口的操作,然后当zero>k时就需要移动left指针直到zero<=k,这一步是出窗口的操作,然后更新数据即最大子数组长度即可

3.代码展示

cpp 复制代码
class Solution {
public:
    int longestOnes(vector<int>& nums, int k) 
    {
        int len = 0;
        int n = nums.size();
        for(int left = 0,right = 0,zero = 0;right < n;right++)
        {
            if(nums[right] == 0)
            {
                zero++;
            }
            while(zero > k)
            {
                if(nums[left++] == 0)
                {
                    zero--;
                }
            }
            len = max(len,right - left + 1);
        }
        return len;
    }
};
相关推荐
致Great1 小时前
科研人的 AI,不该只回答问题:我用字节TraeWork 跑了一遍真实研究任务
算法
纵有疾風起1 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
charlie1145141911 小时前
Cinux · 第一次跳进 Ring 3:用户态与特权隔离
开发语言·c++·操作系统·开源项目
别动我齐刘海1 小时前
机器学习基础2——C++、OpenCV、点云、Open3D
c++·人工智能·opencv·机器学习·计算机视觉·机器人·ros2
测试_AI_一辰2 小时前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
躺不平的理查德2 小时前
Windows C++ 第三方库使用流程备忘录--OpenCV
开发语言·c++
余额瞒着我当琳2 小时前
C++STL容器string--迭代器,string的接口,string的遍历,访问方式
c++
郭涤生2 小时前
rootfs 详解与裁剪优化记录
linux·c++·bsp
lucas_AI2 小时前
给YOLO检测器插 LoRA,'插对地方'比'插什么'更要命
人工智能·算法
LuminousCPP2 小时前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode