156. Merge Intervals【easy】

Given a collection of intervals, merge all overlapping intervals.

 
Example

Given intervals => merged intervals:

[                     [
  [1, 3],               [1, 6],
  [2, 6],      =>       [8, 10],
  [8, 10],              [15, 18]
  [15, 18]            ]
]
Challenge

O(n log n) time and O(1) extra space.

解法一:

 1 /**
 2  * Definition of Interval:
 3  * classs Interval {
 4  *     int start, end;
 5  *     Interval(int start, int end) {
 6  *         this->start = start;
 7  *         this->end = end;
 8  *     }
 9  */
10 
11 
12 class Solution {
13 public:
14   /**
15    * @param intervals: interval list.
16    * @return: A new interval list.
17    */
18   static bool cmp(const Interval &a, const Interval &b) {
19     return (a.start < b.start);
20   }
21   
22   vector<Interval> merge(vector<Interval>& intervals) {
23     vector<Interval> ans;
24     if (intervals.empty()) {
25       return ans;
26     } 
27     
28     sort(intervals.begin(), intervals.end(), cmp);
29     ans.push_back(intervals[0]);
30     for (int i = 1; i < intervals.size(); i++) { 
31       if (ans.back().end >= intervals[i].start) { 
32         ans.back().end = max(ans.back().end, intervals[i].end);
33       } else { 
34         ans.push_back(intervals[i]);
35       } 
36     } 
37     return ans;  
38   }
39 };

先排序,然后逐个判断是否需要合并

原文地址:https://www.cnblogs.com/abc-begin/p/8193595.html