对一个序列,将重叠的间隔进行合并。
例如:
[[1,4],[2,3]] => [[1,4]]
[[1,3],[2,6],[8,10],[15,18]] => [[1,6],[8,10],[15,18]]
难度:【medium】
思路:这道题不是很难,只要把各种case考虑到就基本可以写对。首先对序列进行排序,这里序列题目中使用的是vector<vector<int>>这个数据结构,直接调用sort函数就可以按照每个vector<int>元素进行升序排序了,不需要写比较函数。之后再对左右相邻间隔进行比较。
需要考虑到的case:
1. 常规case: 例如 [[1,3],[2,6],[8,10],[15,18]] => [[1,6],[8,10],[15,18]]
2. 边界case: 序列为空,或只有一个间隔的情况
3. 其他case: 一个间隔的范围包含在另一个间隔的内部 [[1,4],[2,3]] => [[1,4]]
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() <= 1) { return intervals; }
// 注意:这里不用写比较函数
sort(intervals.begin(), intervals.end());
vector<vector<int>> res;
/* 这里是优化前的写法