2023.7.10
代码的思路是:
先将左边界从小到大排序,沿着左边界开始向右编列。
不断记录最小的右边界,当当前气球的左边界大于此前遍历过的所有气球的最小右边界,那么这箭可以射穿之前的所有气球,而当前气球就射不穿,因此result+1
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
points.sort(key=lambda x: x[0]) # 用左边界进行排序
result = 1
for i in range(1, len(points)):
if points[i][0] <= points[i-1][1]: # 当前气球与上一个气球重叠
points[i][1] = min(points[i-1][1], points[i][1]) # 当前气球记录最小右边界
else: # 当前气球的左边界已经超出记录的最小右边界
result += 1
return result