0
点赞
收藏
分享

微信扫一扫

leetcode452_用最少的箭射气球(python)

IT影子 2022-01-12 阅读 95

思路:

也是区间问题,与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)

运行结果:

 

 

举报

相关推荐

0 条评论