1. 程式人生 > >[leetcode]452. Minimum Number of Arrows to Burst Balloons

[leetcode]452. Minimum Number of Arrows to Burst Balloons

[leetcode]452. Minimum Number of Arrows to Burst Balloons


Analysis

好冷鴨—— [每天刷題並不難0.0]

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.
在這裡插入圖片描述


首先對輸入排序,先按照第二個座標排序,第二個座標相同的再按照第一個座標排序。然後每次都吧arrow放在節點的第二個座標處,然後判斷是否能覆蓋下一個節點,不能的話就增加箭頭,以此類推

Implement

class Solution {
public:
    int findMinArrowShots(vector<pair<int, int>>& points) {
        int res = 0;
        int arrow = INT_MIN;
        int len = points.size();
        sort(
points.begin(), points.end(), mycmp); for(int i=0; i<len; i++){ if(arrow != INT_MIN && points[i].first <= arrow) continue; arrow = points[i].second; res++; } return res; } static bool mycmp(pair<int, int
>& p1, pair<int, int>& p2){ if(p1.second == p2.second) return p1.first < p2.first; else return p1.second < p2.second; } };