算法设计与应用基础:第十周

452. Minimum Number of Arrows to Burst Balloons

  • Total Accepted: 10275
  • Total Submissions: 23657
  • Difficulty: Medium
  • Contributors:Leets4Eternity

There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordinates of the horizontal diameter. Since it's horizontal, y-coordinates don't matter and hence the x-coordinates of start and end of the diameter suffice. Start is always smaller than end. There will be at most 104 balloons.

An arrow can be shot up exactly vertically from different points along the x-axis. A balloon with xstart and xend bursts by an arrow shot at x if xstart ≤ x ≤ xend. There is no limit to the number of arrows that can be shot. An arrow once shot keeps travelling up infinitely. The problem is to find the minimum number of arrows that must be shot to burst all balloons.

Example:

Input:
[[10,16], [2,8], [1,6], [7,12]]

Output:
2

Explanation:
One way is to shoot one arrow for example at x = 6 (bursting the balloons [2,8] and [1,6]) and another arrow at x = 11 (bursting the other two balloons).
题解:简单来说,这题就是有许多气球分布在x轴上,这些气球有重合部分,输入每个气球的范围对应的x坐标,问最少通过几次在某一位置射箭可以把所有的气球都弄爆。
最直接的思路就是尽量找重合的气球数最多的位置去射箭,但直接找并不好找。如果把所有气球按照end从小到大来排序,相等则按start来排,那么当我把箭射到第一个气球的end的位置的时候,一定是能射爆第一个气球的所有情况中能射掉气球数最多的情况之一。分两种情况来证明,若箭的位置左边有气球与当前气球的重合位置,则那个气球应该排在当前气球的前面,与当前气球是第一个气球矛盾;若箭的位置右边有气球,则这个气球与当前气球没有重合部分,无论如何也不可能同时爆。因此每次射每个气球的end的位置,当这个位置有其他气球重合,即下一个气球的start小于当前arrow位置时,同时射爆,直接跳到再下一个气球,按照这个思路一直下去,每次射箭计数,最后得到最小射箭数。代码如下:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值