zoukankan      html  css  js  c++  java
  • [LeetCode] Merge Intervals 排序sort

    Given a collection of intervals, merge all overlapping intervals.

    For example,
    Given [1,3],[2,6],[8,10],[15,18],
    return [1,6],[8,10],[15,18].

    Show Tags
     Array Sort
     
      这题其实想好思路很好解决,对于框,如果下个框开始在 其中间,则连在一起,否则单独为一个,这需要按start 排序便可以了,因为类中写自定义比较函数比较麻烦,所以一次写了好几个。
    1. 按start 排序
    2. 初始化变量curstart,curend,记录当前窗的位置。
    3. 与下个窗比较,如果其start < curend,更新 curend。
    4. 否则加入ret,并跟新curstart,curend
    5. 遍历结束,加入最后的窗。
     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 /**
     7  * Definition for an interval.
     8  */
     9  struct Interval {
    10     int start;
    11     int end;
    12     Interval() : start(0), end(0) {}
    13     Interval(int s, int e) : start(s), end(e) {}
    14 };
    15 
    16 class Solution {
    17 public:
    18     vector<Interval> merge(vector<Interval> &intervals) {
    19         sort(intervals.begin(),intervals.end(),
    20              [] (Interval i1,Interval i2)
    21              {return i1.start<i2.start; });
    22 
    23 ///        sort(intervals.begin(),intervals.end(),help_fun);
    24 
    25 /**        struct my_cmp{
    26             bool operator ()(Interval i1,Interval i2){
    27                 return i1.start<i2.start;
    28             }
    29         }my_cmp1;
    30         sort(intervals.begin(),intervals.end(),my_cmp());
    31         sort(intervals.begin(),intervals.end(),my_cmp1);
    32 */
    33 
    34 //        for(int i=0;i<intervals.size();i++){
    35 //            cout<<intervals[i].start<<" "<<intervals[i].end<<endl;
    36 //        }
    37         vector<Interval> ret;
    38         if(intervals.size()<1)  return ret;
    39         int curStart=intervals[0].start,curEnd=intervals[0].end;
    40         for(int i=1;i<intervals.size();i++){
    41             if(curEnd>=intervals[i].start){
    42                 if(intervals[i].end>curEnd) curEnd=intervals[i].end;
    43                 continue;
    44             }
    45             ret.push_back(Interval(curStart,curEnd));
    46             curStart = intervals[i].start;
    47             curEnd = intervals[i].end;
    48         }
    49         ret.push_back(Interval(curStart,curEnd));
    50         return ret;
    51     }
    52 
    53     static bool help_fun(Interval i1,Interval i2)
    54     {
    55         return i1.start<i2.start;
    56     }
    57 };
    58 
    59 int main()
    60 {
    61     vector<Interval> intervals={Interval(8,10),
    62                                 Interval(2,6),
    63                                 Interval(1,3),
    64                                 Interval(15,18)};
    65     Solution sol;
    66     vector<Interval> ret = sol.merge(intervals);
    67 
    68     for(int i=0;i<ret.size();i++){
    69         cout<<ret[i].start<<" "<<ret[i].end<<endl;
    70     }
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    OpenGL------光照+染色
    sicily 1345 能量项链
    sicily 1193 Up the Stairs
    sicily 1172 Queens, Knights and Pawns
    sicily 1206 Stacking Cylinders
    模拟退火算法解tsp问题
    js对象的属性可以是一个变量
    vue中/deep/的使用
    MySQL中DATEDIFF函数使用
    js中的this
  • 原文地址:https://www.cnblogs.com/Azhu/p/4156711.html
Copyright © 2011-2022 走看看