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;
    }
};

 

 

相关文章: