思路:
- 先将所有区间按左边界大小排序;
- 遍历每个区间,两两比较,若前一个区间的右边界小于后一区间的左边界,则这两个区间无法合并,直接把前一区间放入结果数组中;
- 若前一个区间的右边界大于等于后一区间的左边界,表示这俩区间能够合并。此时保持前一区间的左边界不变,右边界变为俩区间最大的右边界;
- 上一条的右边界之所以如此界定,是为了解决前一区间包含后一区间的情况,比如
[[1,4],[2,3]]
,很明显,合并后区间右边界应该是4
而不是3
。
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
vector<int> tmp;
sort(intervals.begin(), intervals.end()); // 1.
tmp = intervals[0];
for (int i = 1; i < intervals.size(); ++ i)
{
if (tmp[1] < intervals[i][0]) // 2.
{
res.push_back(tmp);
tmp = intervals[i]; //把tmp更新为后一区间
}
else
{
tmp[1] = max(tmp[1], intervals[i][1]); // 3.
}
}
res.push_back(tmp);
return res;
}
};