一般对于这种区间计算的题,首先想到的是先排序,把区间弄得有序然后再分段计算。
这里我们需要考虑的是一箭射爆多个气球的情况,我们可以在数轴上画画图,只要尽量重合,那就能尽量多的射爆。所以为了让他们重合,我们需要不断计算重合区间,直到下一气球再也无法重合为止。复杂度是O(nlogn)。
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
points.sort()
i=0
ret=0
print(points)
while i<len(points):
j=i+1
l,r=points[i]
while j<len(points):
p=points[j]
if l<=p[0]<=r:
l,r=max(l,p[0]),min(r,p[1])
j+=1
else:
break
i=j
ret+=1
return ret