zoukankan      html  css  js  c++  java
  • 452. Minimum Number of Arrows to Burst Balloons

    问题:

    给定一组[start, end]表示气球左右边界的气球数组,求最少射多少箭,能将所有气球射爆。

    射箭位置X,start<=X<=end,则能射破该气球。

    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).
    

      

    解法:Greedy

    435. Non-overlapping Intervals  

    本问题,要求最少射箭次数,使得覆盖全部气球。

    假设互相不重叠的气球共有n个,那么最少射n次。

    也就将该问题转换为,求有多少个不重叠的气球。

    即最多有多少个不重叠区间。

    1.按照end排序sort气球。

    2.尽量选择end先结束的作为一个不重叠气球。

    3.再用上一个不重叠气球的end,来找下一个start>end的气球,作为下一个不重叠气球。

    4.最终找完最多不重叠的气球个数。

    代码参考:

     1 class Solution {
     2 public:
     3     bool static cmp(vector<int> a, vector<int> b) {
     4         return a[1]<b[1];
     5     }
     6     //to find the minimal number of arrow shots
     7     //means one shots to get max number of ballons which are all overlapping.
     8     //but if there are mostly n non-overlapping ballons, 
     9     //however we choose the shot position, we should at least shot n times
    10     // to ensure these n non-overlapping ballons should be all burst.
    11     //then this problem == 435
    12     int findMinArrowShots(vector<vector<int>>& points) {
    13         int count = 1;
    14         if(points.empty()) return 0;
    15         sort(points.begin(), points.end(), cmp);
    16         int pre_end = points[0][1];
    17         for(int i=1; i<points.size(); i++) {
    18             if(points[i][0]>pre_end) {
    19                 count++;
    20                 pre_end = points[i][1];
    21             }
    22         }
    23         return count;
    24     }
    25 };
  • 相关阅读:
    堆和栈的区别 (转贴)
    Linux常用的网络命令
    H.264的编解码流程
    链表逆序
    快速排序
    一个计算机硕士毕业生的求职经验(五)
    H.264简单总结
    重要的热键 【Tab】,【Ctrl】—C,【Ctrl】—D
    Linux 文件与目录管理
    一个计算机硕士毕业生的求职经验(六)
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13660623.html
Copyright © 2011-2022 走看看