#452
Medium
贪心

Minimum Number of Arrows to Burst Balloons

用最少箭数射爆所有气球区间。

ArrayGreedy

题目定位

它本质上是区间调度的变形:一支箭可以覆盖一个重叠簇,因此贪心点就在最早结束边界。

关键观察

只要两个气球区间重叠,就能用同一支箭处理,因此真正重要的是重叠区间的共同边界。

目标复杂度

O(n log n) / O(1)

这题的解法思路怎么拆

1

它本质上是区间调度的变形:一支箭可以覆盖一个重叠簇,因此贪心点就在最早结束边界。

2

只要两个气球区间重叠,就能用同一支箭处理,因此真正重要的是重叠区间的共同边界。

3

先找出那个最能保留未来选择空间的局部决策。

4

如果排序能让这个选择被验证,就先排序。

参考实现

Python
# Generic pattern template
items.sort(key=priority)
answer = 0
for item in items:
    if can_take(item):
        take(item)
        answer = update(answer)

常见坑点

warning

区间重叠时错误重置箭的位置。

warning

已经排序了,却仍然把每个区间独立处理。

高频追问

为什么结束边界是正确的贪心锚点?

它和最少删除区间题的差别是什么?

继续刷相关题

先把 贪心 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 452. Minimum Number of Arrows to Burst Balloons 题解思路 | Interview AiBox