Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considered overlapping.
1 class Solution { 2 public: 3 vector<vector<int>> merge(vector<vector<int>>& intervals) { 4 sort(intervals.begin(),intervals.end()); 5 int n = intervals.size(); 6 vector<vector<int>> res(n,vector<int>(2,0)); 7 8 int idx = -1; 9 for(auto interval:intervals) { 10 if (idx == -1 || res[idx][1] < interval[0]) { 11 res[++idx] = interval; 12 } else { 13 res[idx][1] = max(res[idx][1],interval[1]); 14 } 15 } 16 res.resize(idx+1); 17 return res; 18 } 19 };
排序+双指针
class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { vector<vector<int>> res; int slow = 0; sort(intervals.begin(),intervals.end()); int n = intervals.size(); while(slow < n) { int fast = slow + 1; int t = intervals[slow][1]; while(fast < n && t>=intervals[fast][0]){ t = max(t,intervals[fast][1]); fast++; } vector<int> res_single = {intervals[slow][0],t}; res.emplace_back(res_single); slow = fast; } return res; } };