https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/description/
把每個 interval 排序,end 設定為 index=0 的尾巴
從 index=1 開始 loop,如果重疊,把尾巴設定為較短的那個
如果沒重疊, shoot ++,把尾巴設定為新的
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
if len(points) == 1:
return 1
sorted_points = sorted(points, key = lambda x: x[0])
prev_end = sorted_points[0][1]
shoot = 1
for i in range(1, len(points)):
point = sorted_points[i]
if point[0] > prev_end:
shoot += 1
prev_end = point[1]
else:
prev_end = min(prev_end, point[1])
return shoot
Time: O(n log n)
Space: O(1)