LeetCode 435:无重叠区间,从删除最少转成保留最多

题目要求 给你一个区间数组 intervals。 每个区间写成: [start, end] 题目要求删除尽量少的区间,使剩下的区间互不重叠。 最后返回: 最少需要删除多少个区间 输入输出 输入:intervals: List[List[int]] 输出:int 每个区间满足 start < end 如果两个区间只是在端点相接,不算重叠 也就是说: [1,2] 和 [2,3] 可以同时保留。 示例 输入:intervals = [[1,2],[2,3],[3,4],[1,3]] 输出:1 删除 [1,3] 后,剩下: [[1,2],[2,3],[3,4]] 这些区间互不重叠。 再看两个边界例子: 输入:intervals = [[1,2],[1,2],[1,2]] 输出:2 三个完全相同的区间最多只能保留一个,所以要删除两个。 输入:intervals = [[1,2],[2,3]] 输出:0 这两个区间只在端点 2 相接,不算重叠,所以不用删除。 约束 1 <= intervals.length <= 10^5 intervals[i].length == 2 -5 * 10^4 <= start_i < end_i <= 5 * 10^4 Step 1:不要先问删哪个,先问最多能留几个 先看这个例子: intervals = [[1,2],[2,3],[3,4],[1,3]] 题目问的是: ...

2026年7月6日 · 3 分钟 · map[name:Jeanphilo]

LeetCode 452:用最少数量的箭引爆气球,从共同交集推出区间贪心

题目要求 给你一个气球数组 points。 每个气球是一个水平区间: [start, end] 如果一支箭射在横坐标 x 上,并且: start <= x <= end 那么这支箭可以射爆这个气球。 一支箭会一直向上飞,所以同一个 x 上能覆盖到的所有气球都会被射爆。 题目要求返回: 射爆所有气球需要的最少箭数 输入输出 输入:points: List[List[int]] 输出:int 每个气球是一个区间 [start, end] 箭的位置 x 可以落在端点上 不需要返回每支箭的位置,只需要返回最少箭数 示例 输入:points = [[10,16],[2,8],[1,6],[7,12]] 输出:2 一种射法是: x = 6 射爆 [2,8] 和 [1,6] x = 11 射爆 [10,16] 和 [7,12] 再看两个边界例子: 输入:points = [[1,2],[3,4],[5,6],[7,8]] 输出:4 这些气球互不相交,每个气球都需要一支箭。 输入:points = [[1,2],[2,3],[3,4],[4,5]] 输出:2 因为箭可以射在端点上,所以: x = 2 可以射爆 [1,2] 和 [2,3] x = 4 可以射爆 [3,4] 和 [4,5] 约束 1 <= points.length <= 10^5 points[i].length == 2 -2^31 <= start < end <= 2^31 - 1 Step 1:一支箭到底能覆盖哪些气球? 先看一个很小的问题: ...

2026年7月6日 · 3 分钟 · map[name:Jeanphilo]

Hot100:合并区间(Merge Intervals)排序扫描 ACERS 解析

副标题 / 摘要 合并区间是最典型的“排序 + 线性扫描”问题:先按起点排序,再顺序合并重叠区间。本文按 ACERS 结构拆解题意、核心概念、工程迁移与多语言实现,帮助你形成可复用的区间处理模型。 预计阅读时长:12~15 分钟 标签:Hot100、区间、排序、扫描线、合并区间 SEO 关键词:Merge Intervals, 合并区间, 区间合并, 排序, 扫描线 元描述:合并区间的排序扫描解法与工程应用解析,含复杂度对比与多语言实现。 目标读者 想掌握“区间合并”基础模型的初学者 需要把算法思路迁移到工程场景的中级开发者 正在准备算法面试、希望快速建立区间类题型的求职者 背景 / 动机 区间问题在日程排班、监控窗口、日志聚合、资源分配中非常常见。 如果没有一个统一的合并策略,很容易产生重复统计、冲突判断错误或资源浪费。 因此,“把重叠区间合成最少的不重叠集合”是工程与算法都高频出现的基础能力。 A — Algorithm(题目与算法) 题目还原 给定一个区间数组 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间。 请合并所有重叠的区间,并返回一个不重叠的区间数组,且能完整覆盖输入中的所有区间。 输入输出 名称 类型 描述 intervals int[][] 区间数组,元素为 [start, end] 返回 int[][] 合并后的不重叠区间数组 基础示例(官方) 输入 输出 [[1,3],[2,6],[8,10],[15,18]] [[1,6],[8,10],[15,18]] [[1,4],[4,5]] [[1,5]] 合并示意(示例 1) 排序后: [1,3] [2,6] [8,10] [15,18] 合并: [1,3] + [2,6] -> [1,6] 结果: [1,6] [8,10] [15,18] 思路概览 按区间起点升序排序(起点相同则按终点升序)。 线性扫描,维护当前合并区间 [cur_start, cur_end]。 如果下一个区间 next_start <= cur_end,则合并为 cur_end = max(cur_end, next_end)。 否则将当前区间放入结果,并以新起点开始下一段合并。 C — Concepts(核心思想) 核心概念 概念 含义 作用 重叠 next_start <= cur_end 判断是否需要合并 合并 cur_end = max(cur_end, next_end) 扩展当前区间 排序 按起点排序 让重叠区间相邻 方法类型 排序 + 线性扫描 + 贪心合并。 ...

2026年1月24日 · 6 分钟 · map[name:Jeanphilo]