Leetcode每日一题:452.minimum-number-of-arrows-to-burst-balloons(最少数量的箭引爆气球)

在这里插入图片描述
题意:大致就是这么多区间,我要用最少的箭将这些区间全部串起来,区间是水平的,箭是垂直的;
思路:对区间按照起点大小进行排序,设立max_start 和 min_end ,这样points[i+1][0]>=points[i][0],只要points[i+1][0]>=max_start && points[i+1][0]<=min_end那么,下个区间就和前面的区间有交集,就可以用同一支箭串起来,并更新max_start 和 min_end,保证一只箭能串到更多的区间;如果遇到交集断开或者没有交集的,就要arrow++,并且初始化max_start和min_end,重复步骤;
用例子更好说明:
在这里插入图片描述
在这里插入图片描述
复杂度感人;

static bool cmp(vector<int> a, vector<int> b)
{
    return a[0] < b[0];
}

int findMinArrowShots(vector<vector<int>> &points)
{
    int len = points.size();
    if (len == 0)
        return 0;
    sort(points.begin(), points.end(), cmp);
    int max_start = points[0][0], min_end = points[0][1];
    int arrow = 1;
    for (int i = 1; i < len; i++)
    {
        //下一个区间的起点被覆盖
        if (points[i][0] >= max_start && points[i][0] <= min_end)
        {
            //更新max_start和min_end
            max_start = points[i][0];
            if (points[i][1] < min_end)
            {
                min_end = points[i][1];
            }
        }
        //如果下一区间的起点不被覆盖,那么需要另外一只箭去引爆
        else
        {
            arrow++;
            max_start = points[i][0];
            min_end = points[i][1];
        }
    }
    return arrow;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值