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

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

目录:

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

一、本周完成题目

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

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

# Title Difficulty
452 Minimum Number of Arrows to Burst Balloons Medium

题目内容

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(vectorint, int>>& points) {
        int count = 0, arrow = INT_MIN;
        sort(points.begin(), points.end(), mysort);
        for(int i = 0; iif(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

你可能感兴趣的:(算法设计)