【Leetcode贪心区间问题三】452. 用最少数量的箭引爆气球

Leetcode452

1.问题描述

在这里插入图片描述


2.解决方案–>说白了就是求这些气球对应区间的交集的个数就是箭的个数

解法一:

想用哈希,比如说有一个区间(1,6),那就把nums(1,6)标记成1,然鹅发现实现不了因为没那么大数组

//思路一:哈希将各个区间给求交集进而判断最后剩几个区间,但是由于xstart,xend太大了,得开2*2^31大的数组
class Solution {
   
public:
    int findMinArrowShots(vector<vector<int>>& points) {
   
        vector<bool> n(INT_MAX, false);
    }
};



解法二:

整体思路:

思路大概是【(x,y)代表起点和终点】【代码中的注释已经很清晰了其实】
1.先排序按照先x后y,然后遍历气球
2.设置一个temp用来保存目前正在和遍历结果做比较的这么一个(x,y),初始化为第一个气球
3.如果有重叠的那就求子集并更新temp
4.如果当前遍历气球和temp没有重叠那么说明temp这个区间已经不可能和任何后面的气球重叠了,那就加入结果集中
5.最后输出结果别忘了是结果集数量加1,因为最后还剩一个temp没加入

代码实现思路:

1.考虑x==1,x相同那么直接跳过,因为排序的时候x相同y肯定大
2.考虑x(1,6] —>更新temp
----2.1 考虑y<=6
----2.2 考虑y>6
3.考虑x>6 {1,6} {7,y} ---->把temp加入结果集,更新temp

//思路二:排序进而求交集区间端点
class Solution1 {
   
public:
    //static bool cmp(vector<int> a,vector<int> b){
   
    static bool cmp(vector<int>& a,vector<int>& b){
   
        if(a[0]==b[0]) return a[1]<b[1];
        return a[0]<b[0];<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值