第十九周(Minimum Number of Arrows to Burst Balloons)

第十九周(Minimum Number of Arrows to Burst Balloons)

目录:

  • 本周完成题目
  • 主要过程思路
  • 相关代码

一、本周完成题目

本周共完成1道题目,1道Medium。

具体完成题目及难度如下表:

#TitleDifficulty
452Minimum Number of Arrows to Burst BalloonsMedium

题目内容

1、Minimum Number of Arrows to Burst Balloons 
There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordinates of the horizontal diameter. Since it’s horizontal, y-coordinates don’t matter and hence the x-coordinates of start and end of the diameter suffice. Start is always smaller than end. There will be at most 104 balloons.

An arrow can be shot up exactly vertically from different points along the x-axis. A balloon with xstart and xend bursts by an arrow shot at x if xstart ≤ x ≤ xend. There is no limit to the number of arrows that can be shot. An arrow once shot keeps travelling up infinitely. The problem is to find the minimum number of arrows that must be shot to burst all balloons.

Example:

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

Output:
2

Explanation:
One way is to shoot one arrow for example at x = 6 (bursting the balloons [2,8] and [1,6]) and another arrow at x = 11 (bursting the other two balloons).

题目大意:本题中有一些气球范围,当射出的arrow在这个范围中这个气球就会破。对于所有气球范围,求最少能射破全部气球的arrow数目。

二、主要过程思路

1、Minimum Number of Arrows to Burst Balloons:

首先对于范围序列进行一次排序。排序的规则是优先判断最大值是否相等。若相等则按最小值进行排序,反之按最大值进行升序排序。进行排序之后,每次将下一个数的最小值与arrow的值进行比较,如果最小值大于arrow,说明arrow不在这个范围中,需要新建一个arrow(令当前范围的最大值为arrow,以保证能够射破最多的范围),count++。一直访问到数组的末尾则可以得到count的值。

三、相关代码

Minimum Number of Arrows to Burst Balloons

class Solution {
public:
     int findMinArrowShots(vector<pair<int, int>>& points) {
        int count = 0, arrow = INT_MIN;
        sort(points.begin(), points.end(), mysort);
        for(int i = 0; i<points.size(); i++){
            if(arrow!=INT_MIN && points[i].first<=arrow){continue;} //former arrow shot points[i] 
            arrow = points[i].second; // new arrow shot the end of points[i]
            count++;
        }
        return count;
      }
      static bool mysort(pair<int, int>& a, pair<int, int>& b){
        return a.second==b.second?a.first<b.first:a.second<b.second;
      }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值