【滑动窗口算法】-- 最大连续1的个数

embedded/2025/2/28 6:34:09/

文章目录

  • 1. 题目
  • 2. 题目解析
  • 3. 代码

1. 题目

在线oj
给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 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。

提示:

java">1 <= nums.length <= 105
nums[i] 不是 0 就是 1
0 <= k <= nums.length

2. 题目解析

滑动窗口 + zero计数器
在这里插入图片描述
定义left 、right,以及一个zero计数器,我们假设此时题目给定的k是2。
在这里插入图片描述
right 每往前走一步,就判断一下是不是0,如果是0,zero计数器就+1.
在这里插入图片描述
直到right走到上图的位置,right所对应的位置是0,zero需要再次+1,就大于了给定的k值,此时就要记录下来“最大连续1的个数”。
在这里插入图片描述
接下来,如果按照暴力枚举的方法,那么left来到下一个元素,right 就要回退到left所在的位置。
在这里插入图片描述
但是由于right左边的区域,无论以谁作为left的起点,最长的长度也就到此时right的位置,所以我只需要让left一直向前,我们做是否为0的判断,right也无需回退。

解题思路:

  1. left = 0, right = 0;
  2. 进窗口(如果是1,无视;如果是0,zero++)
  3. 判断(zero是否大于k){
    • 如果zero 大于k,则出窗口(如果是1,无视;如果是0,zero–)
  4. 更新结果

3. 代码

java">class Solution {public int longestOnes(int[] nums, int k) {int n = nums.length;int zero = 0;int ret = 0;for (int left = 0, right = 0; right < n; right++) {//进窗口if (nums[right] == 0){zero++;}//判断while (zero > k){//出窗口if (nums[left++] == 0){zero--;}}//更新结果ret = Math.max(ret, right - left + 1);}return ret;}
} 

http://www.ppmy.cn/embedded/167741.html

相关文章

leetcode 912. 排序数组

912. 排序数组 912. 排序数组 题目 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))&#xff0c;并且空间复杂度尽可能小。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1…

子进程的创建 ─── linux第10课

目录 进程 内核数据结构代码和数据 fork 创建子进程 ​编辑 创建多进程 理解子进程的创建(总结) 进程 内核数据结构代码和数据 一个进程只有一个唯一父进程,但可以拥有多个子进程,因此进程是树形结构. fork 创建子进程 父子进程代码共享,数据各自私有的原因 因为数据私…

DeepSeek 助力 Vue3 开发:打造丝滑的下拉选择框(Dropdown Select)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求&#xff0c;目前需要了解以下几个关键点及分步解决方案&#xff1a; --- 一、现状分析 1. Ollama 的限制&#xff1a; - 目前Ollama主要面向文本大模型&#xff0c;原生不支持直接上传/处理图片 …

2024 年 6 月青少年软编等考 C 语言四级真题解析

目录 T1. 人以群分思路分析T2. 那就别担心了思路分析T3. 凑零钱思路分析T4. 拼题 A 打卡奖励思路分析T1. 人以群分 社交网络中我们给每个人定义了一个 “活跃度”,现希望根据这个指标把人群分为两大类,即外向型( o u t g o i n g outgoing outgoing,即活跃度高的)和内向型…

现在集成大模型的IDE,哪种开发效率最高

目录 1. Visual Studio Code GitHub Copilot 2. JetBrains IDE&#xff08;IntelliJ/PyCharm等&#xff09; Copilot/Codeium 3. Cursor 4. 云IDE&#xff08;GitHub Codespaces / Replit&#xff09; 5. Amazon CodeWhisperer 效率对比与选择建议 未来趋势 1. Visual …

Linux提权之docker提权(十三) 链接第八篇完整版

书接上回 实验环境一样的 第八篇 我们用ssh密钥登陆后 发现我们web1的权限 当我们拿到web1的权限时 我们无法提权(这里我用的继续十二的环境 大家也可以继续) 所以我们首先要提权(当然必须是一个完整的 tty shell 不会的 我们去看第二篇 当然我下边也给你表注明了) python3…

进程 ─── linux第10课

目录 回顾上一节 进程 基本概念 描述进程 - PCB task_struct - PCB的一种 task_ struct内容分类 组织进程 下面来介绍task_struct内部 PID 和PPID 子进程与父进程 getpid()和getppid() 杀进程 exe 和 cwd 回顾上一节 1. 如果我们写的程序要访问硬件,必定通过sy…