• 452. 用最少数量的箭引爆气球-贪心-中等难度


    问题描述

    在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。

    一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足  xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。

    Example:

    输入:
    [[10,16], [2,8], [1,6], [7,12]]

    输出:
    2

    解释:
    对于该样例,我们可以在x = 6(射爆[2,8],[1,6]两个气球)和 x = 11(射爆另外两个气球)。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons

    解答

    '''
    
    先根据右端进行排序,排序之后从小到大,根据右端进行射击。
    贪心:每次射击尽可能多的气球。
    时间复杂度:O(n^2),空间复杂度O(0)
    
    '''
    class Solution(object):
        def findMinArrowShots(self, points):
            num = len(points)
            if num <= 1:
                return num
            #下面是根据右端进行排序
            def takeSecond(elem):
                return elem[1]
            points.sort(key=takeSecond)
            print(points)
            i = 0
            count = 1
            right = points[0][1]
            while i < num:
                print(right)
                if i+1 < num:
                    if right >= points[i+1][0]:
                        pass
                    else:
                        count += 1
                        right = points[i+1][1]
                i += 1
            return count
  • 相关阅读:
    java8 list 删除元素 简单版
    java8 list 删除元素 结构复杂版
    xshell 连接 centos 中的 vi 配色
    Redis 运行出错
    电脑清理秘籍 [ 精心总结 ]
    团队项目之后的反思
    团队项目心得 [ 感想 ]
    团队项目心得 [ 第二阶段项目总结 ]
    团队项目心得 [ 第一阶段项目总结 ]
    《创新者》读书笔记
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13225715.html
Copyright © 2020-2023  润新知