首页 > 代码库 > [LeetCode] Merge Intervals 排序sort

[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

 

[LeetCode] Merge Intervals 排序sort