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

1004. (最大连续1的个数) Max Consecutive Ones III

问题理解

给定一个二进制数组 nums 和整数 k,最多可以将 k 个 0 翻转为 1,求翻转后最长的连续 1 子数组的长度。等价于:找一个最长子数组,其中 0 的个数 ≤ k

思路

使用 滑动窗口(双指针) 技术:

  • 维护窗口 [i, j)(左闭右开),其中 i 是左边界,j 是右边界(指向下一个待处理元素)。
  • 用变量 flips 表示当前还能翻转多少个 0(初始为 k)。
  • 右指针 j 不断向右扩展:
    • 遇到 1:直接纳入窗口;
    • 遇到 0:若还有翻转次数(flips > 0),则消耗一次;否则停止扩展。
  • 左指针 i 每次右移时:
    • 如果刚离开窗口的元素是 0(即 nums[i-1] == 0),说明之前消耗了一次翻转,现在应归还一次翻转机会flips++)。
  • 记录所有合法窗口的最大长度 j - i

⚠️ 注意:窗口定义为 [i, j),因此长度是 j - i,不是 j - i + 1。

trick

  • 避免越界:在访问 nums[i-1] 前必须判断 i != 0
  • 状态复用j 指针永不回退,保证整体时间复杂度为 O(n)。
  • 翻转次数管理:通过“借”和“还”机制维护 flips,确保其始终反映当前窗口的剩余翻转能力。
  • 左闭右开窗口:简化边界处理,j 始终是第一个未包含的元素。

Code

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int ans = 0;int i = 0, j = 0, next_1 = 0;int n = nums.size();int flips = k;for(int i = 0; i < n; i++){if(j == n) break;if(i != 0 && nums[i - 1] == 0){flips++;}while (j < n) {if (nums[j] == 0) {if (flips == 0) break; // 不能再翻了flips--;}j++; // j 是下一个要处理的位置,当前 [i, j-1] 是合法窗口}ans = max(ans, j - i);}return ans;}
};
http://www.jsqmd.com/news/314259/

相关文章:

  • R 数据框
  • Loop Compensation
  • react中redux的connect作用是什么
  • 数据清洗全攻略:让大数据分析更精准的7个步骤
  • 2025.12.13 作业- # P1717 钓鱼
  • 2025.12.13 作业 - # P1649 [USACO07OCT] Obstacle Course S
  • CCF CSP真题复盘
  • 2025.12.13 作业 - # P1638 逛画展
  • 408真题解析-2010-17-计组-TLB\Cache\Page关系
  • jEasyUI 启用行内编辑
  • Thinkphp和Laravel企业内部小型网络管理系统的设计与实现_
  • Thinkphp和Laravel基于hadoop大数据的心脏病患者健康数据分析系统_
  • 构建跨端提示体验:Flutter × OpenHarmony 实现底部 SnackBar 卡片
  • AI原生应用架构设计:混合推理的模块化实现
  • 【Flutter × OpenHarmony】跨端开发实现全局Toast提示卡片
  • 基于深度学习YOLOv10的疲劳驾驶识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 打造跨端驾照学习助手:Flutter × OpenHarmony 实战解析
  • 基于深度学习YOLOv10的吸烟识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • P5825 排列计数 题解 / 二项式反演 容斥
  • 基于深度学习YOLOv10的固体废物识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 梦断代码阅读笔记1
  • 构建跨端驾照学习助手:Flutter × OpenHarmony 的用户信息与驾照状态卡片实现
  • memset 函数用于将一块内存区域中的每个字节设置为特定的值
  • 从进度可视化出发:基于 Flutter × OpenHarmony 的驾照学习助手实践
  • 试玩5款台球小游戏,最上头的居然是这款
  • [特殊字符] Go语言从入门到实践(一):为什么Go能让程序员“少加班“?
  • 数据跨境、隐私泄露、审计溯源——出海企业三大安全必答题
  • 大数据ODS、DWD、DWS、ADS 分层
  • 力扣热题100 20. 有效的括号
  • 2025.12.13 总结 - # P1638 逛画展