当前位置: 首页 > backend >正文

LeetCode 1004. 最大连续1的个数 III

LeetCode 1004题 “最大连续1的个数 III” 是一道关于数组和滑动窗口的问题。题目描述如下:

题目描述

给定一个由若干 01 组成的数组 nums,以及一个整数 k。你可以将最多 k0 翻转为 1。返回经过翻转操作后,数组中连续 1 的最大个数。

示例:

  • 输入:nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2
  • 输出:6
  • 解释:将中间的两个 0 翻转为 1,得到最长连续 1 的子数组 [1,1,1,0,0,1,1,1,1,1,1],长度为 6。

解题思路:滑动窗口

这道题可以通过滑动窗口算法高效解决。核心思路是:找到一个最长的子数组,其中最多包含 k0。如果窗口内的 0 数量超过 k,则需要收缩窗口左侧。

具体步骤如下:

  1. 扩展窗口:不断向右移动右指针 right,并统计窗口内 0 的数量。
  2. 收缩窗口:如果窗口内 0 的数量超过 k,则向右移动左指针 left,并减少窗口内 0 的数量,直到窗口内 0 的数量不超过 k
  3. 记录最大长度:在每次窗口合法(0 的数量 ≤ k)时,更新最大长度。

代码实现

以下是使用滑动窗口解决该问题的代码:

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int n = nums.size();int left = 0, right = 0;int zeroCount = 0;  // 记录窗口内0的数量int maxLen = 0;     // 记录最大连续1的长度while (right < n) {// 扩展窗口:如果当前元素是0,增加zeroCountif (nums[right] == 0) {zeroCount++;}// 收缩窗口:如果窗口内0的数量超过kwhile (zeroCount > k) {if (nums[left] == 0) {zeroCount--;}left++;}// 更新最大长度maxLen = max(maxLen, right - left + 1);right++;}return maxLen;}
};

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组的长度。每个元素最多被访问两次(右指针和左指针各一次)。
  • 空间复杂度:O(1),只需要常数级的额外空间。

关键点解释

  1. 窗口合法性:窗口内 0 的数量 ≤ k 时,窗口合法,可以计算长度。
  2. 动态调整:通过移动左指针 left,动态调整窗口大小,确保窗口内 0 的数量始终合法。
  3. 最大长度更新:每次窗口合法时,计算当前窗口长度 right - left + 1,并更新最大值。

这种滑动窗口的思想在处理数组中的子数组问题时非常常见,尤其是需要满足特定条件的最长/最短子数组问题。

http://www.xdnf.cn/news/7939.html

相关文章:

  • PH热榜 | 2025-05-21
  • 影刀Fun叉鸟-打刀刀
  • PyTorch的基本操作
  • 5月21日星期三今日早报简报微语报早读
  • 架构的设计
  • WebGL2混合与雾
  • tshark的使用技巧(wireshark的命令行,类似tcpdump):转换格式,设置filter
  • ARM64虚拟地址到物理地址转换页表映射过程--基于crash
  • 系统工程与一般系统理论 | 技术 / 应用 / 跨领域认知融合
  • 《AI工程技术栈》:三层结构解析,AI工程如何区别于ML工程与全栈工程
  • 精益数据分析(75/126):用户反馈的科学解读与试验驱动迭代——Rally的双向验证方法论
  • PEFT库PromptTuningConfig 配置
  • HarmonyOS NEXT端云一体化工程目录结构
  • ping、tcpping、psping、paping、hping的区别
  • 堆排序的两种建堆方式
  • 各类时钟源对比
  • sqlalchemy常用的数据类型
  • 浅谈mRNA的量与蛋白表达量不线性相关的原因(二)
  • C语言接收数据、解析数据帧,解决丢包粘包问题
  • 深入理解用于中断控制的 NVIC 寄存器
  • Python Day28 学习
  • 小白成长之路-Linux磁盘管理(二)
  • 香橙派3B学习笔记1:Putty串口_WIFI连接_SSH远程登录_网线连接
  • 精准识别记忆细胞!Elabscience PE Anti-Human/Mouse CD44 抗原特异性抗体
  • Proxmox 主机与虚拟机全部断网问题排查与解决记录
  • LabVIEW中EtherCAT从站拓扑离线创建及信息查询
  • Venom: 1靶场
  • 使用 Matter.js 创建封闭箱体与里面的小球
  • SOPHGO算能科技BM1688内存使用与编解码开发指南
  • 【Docker】Docker -p 将容器内部的端口映射到宿主机的端口