力扣-贪心-56 合并区间

时间:2025-02-25 07:18:54

思路

先按照左区间进行排序,然后初始化left和right,重叠时,更新right,不重叠时,收集区间

代码

class Solution {
public:
    static bool cmp(vector<int> a, vector<int> b){
        if(a[0] == b[0]){
            return a[1] < b[1];
        }
        return a[0] < b[0];
    }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), cmp);
        
        vector<vector<int>> res;
        int left = intervals[0][0];
        int right = intervals[0][1];
        for(int i = 1; i < intervals.size(); i++){
            if(intervals[i][0] <= right){
                right = max(right, intervals[i][1]);
            }else{
                vector<int> n = {left, right};
                res.push_back(n);
                left = intervals[i][0];
                right = intervals[i][1];
            }
        }
        vector<int> n = {left, right};
        res.push_back(n);

        return res;
    }
};