题目:
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).
题解:
其实这就是一个区间合并的问题,每两个区间之间进行一个交集运算,直到两个区间不再有交集,那么当所有区间都合并完毕之后剩下的区间数量就是我们想要的答案
python 代码:
def findMinArrowShots(self, points):
“”"
:type points: List[List[int]]
:rtype: int
“”"
if not points:return 0
ans,ll,lr=1,-float(‘inf’),float(‘inf’)
for l,r in sorted(points):
if l>=ll and l<=lr:
ll,lr=l,min(lr,r)
else:
ans,ll,lr=ans+1,l,r
return ans
Time complexity:O(N),where N is the length of the Array which is given
space complexity:O(1)