思路:
也是区间问题,与435相似,首先排序,以第一个区间的右边界作为对比,如果下一个区间的左边界比它小,则说明用一支箭可以射中两个区间,否则,两个区间是不重叠的,需要两支箭
class Solution(object):
def findMinArrowShots(self, points):
if not points:
return 0
nums = sorted(points, key=lambda x: x[1]) # 按照每一个区间的末尾进行排序
print(nums)
end = nums[0][1] # 第一个区间的末尾作为对比
count = 1 # 至少需要一支箭
for i in range(1,len(nums)):
if nums[i][0]>end:#下一个区间的左侧小于等于当前区间的右侧,则这只箭可以穿过俩,count不加1,两区域
#不重叠时+1
count+=1
end = nums[i][1]
return count
#测试
m = Solution()
k = m.findMinArrowShots([[2,3],[7,15],[5,12],[4,5],[8,13],[9,16],[5,8],[8,16],[3,4],[8,17]])
print(k)
运行结果: