LeetCode-56. 合并区间

题目描述 合并区间

给出一个区间的集合,请合并所有重叠的区间。

示例

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

解题思路

  • 按照列表每一个子列表的第一个元素对列表的所有元素进行排序。然后对相邻两个子元素进行两两比较。

  • 假设两个相邻的子元素分别为 [x1, y1] 和 [x2, y2],如果该区间可合并必须满足条件 y1 >= x2。
    若该区间可合并,合并结果可能有两种:
    当 y1 < y2 时,合并结果为 [x1, y2]
    当 y1 >= y2 时,合并结果为 [x1, y1]

代码

class Solution {
public:
    vector> merge(vector>& intervals) {
        vector> res;
        if(intervals.size()==0||intervals[0].size()==0) return res;
        if(intervals.size()==1) return intervals;
        sort(intervals.begin(), intervals.end(), [](vector a, vector b){
            return a[0] < b[0];
        });
        int x=intervals[0][0];
        int y=intervals[0][1];
        for(int i=1;iy) y = intervals[i][1];
            }else{
                res.push_back({x, y});
                x = intervals[i][0];
                y = intervals[i][1];
            }
        }
        res.push_back({x, y});
        return res;
    }
};

你可能感兴趣的:(LeetCode-56. 合并区间)