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;
    }
}
相关推荐
云泽8084 分钟前
二叉树高阶笔试算法题精讲(一):序列化、层序遍历、LCA 与 BST 转换
数据结构·c++·算法
再卷也是菜13 分钟前
算法提高篇(3)线段树(下)
算法
嘻嘻哈哈樱桃18 分钟前
牛客经典101题题解集--二叉树
java·数据结构·python·算法·leetcode·职场和发展
6Hzlia20 分钟前
【Hot 100 刷题计划】 LeetCode 98. 验证二叉搜索树 | C++ 指针边界法
c++·算法·leetcode
AI科技星29 分钟前
算子数学|独立完整学科章节(百条原创公式· ROOT传世定稿)
大数据·算法·机器学习·数学建模·数据挖掘·量子计算
斯维赤37 分钟前
每天学习一个小算法:堆排序
学习·算法·排序算法
ncj39343790642 分钟前
Canvas 图形开发高频算法面试题
算法·canvas
MediaTea43 分钟前
AI 术语通俗词典:F1 值(分类)
人工智能·算法·机器学习·分类·数据挖掘
踩坑记录44 分钟前
leetcode hot100 300. 最长递增子序列 medium 动态规划
leetcode·动态规划
難釋懷1 小时前
Redis数据结构-Dict
数据结构·数据库·redis