1004.最大连续1的个数Ⅲ

1.题目描述

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k0 ,则返回 数组中连续 1 的最大个数

示例 1:

复制代码
输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释:[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。

示例 2:

复制代码
输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

提示:

  • 1 <= nums.length <= 105
  • nums[i] 不是 0 就是 1
  • 0 <= k <= nums.length

2.解题思路

思路同 考试的最大困扰度 相同,使用变长滑动窗口,窗口左指针移动的条件是:窗口中0的个数已经超过了k个,就说明无法再通过翻转0使得窗口内全是1了,必须要移除掉超出的0,使用res记录遍历过程中最大的窗口大小,即为最大连续1的个数。

3.代码实现

java 复制代码
class Solution {
    public int longestOnes(int[] nums, int k) {
        int cnt = 0;
        int res = 0;
        int l = 0;
        for (int r = 0; r < nums.length; r++) {
            if (nums[r] == 0) {
                cnt += 1;
            }
            while (cnt > k) {
                if (nums[l] == 0) {
                    cnt -= 1;
                }
                l += 1;
            }
            res = Math.max(res, r - l + 1);
        }
        return res;
    }
}
相关推荐
穿条秋裤到处跑几秒前
每日一道leetcode(2026.04.10):三个相等元素之间的最小距离 I
算法·leetcode
nlpming10 分钟前
OpenClaw 代码解析
算法
学习永无止境@14 分钟前
MATLAB中矩阵转置
算法·matlab·fpga开发·矩阵
七颗糖很甜14 分钟前
雨滴谱数据深度解析——从原始变量到科学产品的Python实现【下篇】
python·算法·pandas
nlpming14 分钟前
OpenClaw system prompt定义
算法
nlpming15 分钟前
OpenClaw安装配置及简介
算法
爱码小白15 分钟前
MySQL 常用数据类型的系统总结
数据库·python·算法
玛丽莲茼蒿22 分钟前
Leetcode hot100 【中等】括号生成
算法·leetcode·职场和发展
小欣加油25 分钟前
leetcode 128 最长连续序列
c++·算法·leetcode·职场和发展
汀、人工智能37 分钟前
[特殊字符] 第94课:删除无效的括号
数据结构·算法·数据库架构·图论·bfs·删除无效的括号