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;
    }
};
相关推荐
t***5443 分钟前
Dev-C++ 中使用 Clang 调试有哪些常见问题
开发语言·c++
itzixiao9 分钟前
L1-058 6翻了(15分)[java][python]
java·开发语言·python·算法
念何架构之路10 分钟前
数组和切片实战
数据结构·算法·排序算法
重生之我是Java开发战士12 分钟前
【数据结构】AVL树解析
数据结构·算法
珹洺14 分钟前
C++AI多模型聊天系统(四)SSH反向隧道/虚拟局域网(VLAN)调用本地Ollama大模型
c++·人工智能·ssh
小π军15 分钟前
STL之multiset 常见API介绍
数据结构·c++·算法
踩坑记录15 分钟前
leetcode hot100 1143. 最长公共子序列 mediuim 递归优化
leetcode
研究点啥好呢16 分钟前
Momenta算法工程师面试题精选:10道高频考题+答案解析
人工智能·算法·求职招聘·面试笔试
Resistance丶未来17 分钟前
DeepSeek-V4 新手快速上手指南
数据结构·python·gpt·算法·机器学习·claude·claude 4.6
同勉共进17 分钟前
并发编程系列(二)—— store, load 与 RMW
c++·arm·并发编程·x86·store·load·rmw