【面试经典150 | 区间】用最少数量的箭引爆气球

文章目录

Tag

【合并区间】【排序】【数组】


题目来源

452. 用最少数量的箭引爆气球


题目解读

每个气球都有一个占据x轴的一个范围,在这个范围里射出一只箭就会引爆该气球,现在有一堆排布好的气球,试问引爆所有的气球至少需要多少支箭。


解题思路

方法一:合并区间

气球都是以区间的形式给出的,那么我们将有交集的区间进行合并,然后剩下的区间每个区间都需要一只箭来引爆q

实现代码

cpp 复制代码
class Solution {
public:
    int findMinArrowShots(vector<vector<int>>& points) {
        int res = 1;
        sort(points.begin(), points.end());
        int r = points[0][1];
        for (int i = 1; i < points.size(); ++i) {
            if (points[i][0] > r) {
                ++res;
            }
            else {
                points[i][0] = max(points[i-1][0], points[i][0]);
                points[i][1] = min(points[i-1][1], points[i][1]);
            }
            r = points[i][1];
        }
        return res;
    }
};

复杂度分析

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn), n n n 为数组 points 的长度。

空间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),额外的空间是排序占据的空间。


其他语言

python3

合并区间

python3 复制代码
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        points.sort()

        r = points[0][1]
        n = len(points)
        res = 1
        for i in range(1, n):
            if points[i][0] > r:
                res += 1
            else:
                points[i][0] = max(points[i-1][0], points[i][0])
                points[i][1] = min(points[i-1][1], points[i][1])
            r = points[i][1]
        return res

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

相关推荐
布莱克60512 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
aqiu11111110 天前
【算法刷题】蓝桥杯/AtCoder:删除元素后的中位数问题(Symmetry / Median)
算法·蓝桥杯·排序·中位数
aqiu11111112 天前
【算法刷题】蓝桥杯:0星际争霸(大数比较 + 多关键字自定义排序)
算法·排序·自定义排序
aqiu11111116 天前
【算法刷题】蓝桥杯:怎么倒茶(贪心算法 + 结构体排序)
贪心·排序
OuO-216 天前
笔试强训 Day 43:kotori 和抽卡(二)、ruby 和薯条、循环汉诺塔
数学·前缀和·二分查找·动态规划·排序·滑动窗口·循环汉诺塔
Tisfy21 天前
LeetCode 3731.找出缺失的元素:哈希 / 排序
算法·leetcode·哈希算法·排序·哈希表
Tisfy1 个月前
LeetCode 3016.输入单词需要的最少按键次数 II:排序(贪心)
linux·算法·leetcode·题解·贪心·排序·计数
Tisfy1 个月前
LeetCode 3517.最小回文排列 I:排序(Python两行版) / 计数(O(n)时间+O(C)空间+字符串原地修改)
c语言·python·leetcode·字符串·排序·计数排序·回文
txzrxz1 个月前
拓补排序讲解
c++·算法·图论·排序
汉克老师2 个月前
GESP2026年6月认证C++八级( 第三部分编程题(1、线网建设))精讲
c++·最小生成树·排序·kruskal·并查集·gesp8级