机考刷题之 13 LeetCode 1004 最大连续1的个数 III

题目

分析

由于这个题目相当于是往0里去填1,所以我们在拓展窗口的时候应该尤其关注0的个数。

由于这个题目存在以下关系:

当nums[left,right]的0的个数>k,那么nums[left,right+1]、nums[left,right+2]、....nums[left,end]的0的个数都会>k。

当nums[left,right]的0的个数<=k,其内部的子串的0个数都<=k

那么就满足之前提到的滑动窗口的做题条件:

代码

cpp 复制代码
class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        int left = 0, zeroCount = 0, maxLen = 0;
        
        for (int right = 0; right < nums.size(); right++) {
            // 扩展右边界
            if (nums[right] == 0) {
                zeroCount++;
            }
            
            // 收缩左边界,直到窗口内 0 的数量 <= k
            while (zeroCount > k) {
                if (nums[left] == 0) {
                    zeroCount--;
                }
                left++;
            }
            
            // 更新最大长度(此时窗口 [left, right] 是合法的)
            maxLen = max(maxLen, right - left + 1);
        }
        
        return maxLen;
    }
};

结果

相关推荐
一叶落4382 小时前
139. 单词拆分(Word Break)
c语言·数据结构·算法·leetcode·深度优先·图论
Yupureki2 小时前
《算法竞赛从入门到国奖》算法基础:数据结构-单调队列
c语言·数据结构·c++·算法
逆境不可逃2 小时前
【从零入门23种设计模式17】行为型之中介者模式
java·leetcode·microsoft·设计模式·职场和发展·中介者模式
鸽鸽程序猿2 小时前
【JavaEE】【SpringAI】聊天模型
java·java-ee
韭菜张师傅2 小时前
Ceph环境完全重置指南:彻底清理集群环境
java·网络·ceph
重生之我是Java开发战士2 小时前
【递归、搜索与回溯】穷举,暴搜,深搜,回溯,剪枝:全排列与子集
算法·机器学习·剪枝
SunnyDays10112 小时前
使用 Java 实现 Word 文档水印自动化(全面指南)
java·添加水印·word文档
敲代码的小王!2 小时前
prompt开发游戏-哄哄模拟器
java·游戏·ai·prompt
学编程就要猛2 小时前
JavaEE:多线程初阶
java·开发语言·jvm