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 };
先排序,然后逐个判断是否需要合并