452. 用最少数量的箭引爆气球
分析
- 要保证最少的弓箭数,我们可以采用如下贪心策略:
- 按区间的结束点升序排序:优先处理结束点较小的区间,这样可以最大化覆盖更多的区间
- 每次发射箭时,记录当前箭能够覆盖的结束点
r
。如果后续某个气球的开始点x_start
大于当前箭的覆盖范围r
,则需要发射一支新的箭
- 将所有气球的直径区间按照结束点升序排序
- 初始化箭的数量
res
为1
,并将第一支箭的覆盖范围设为第一个区间的结束点 - 遍历排序后的区间:
- 如果当前区间的开始点大于箭的覆盖范围,说明需要一支新的箭来覆盖当前气球
- 更新箭的覆盖范围为当前区间的结束点
时间复杂度
- 排序的时间复杂度为
O(nlogn)
,其中n
是气球的数量 - 遍历区间的复杂度为
O(n)
总时间复杂度为 O(nlogn)
空间复杂度
空间复杂度为 O(1)
C++代码
|
|