LeetCode 56
https://leetcode.cn/problems/merge-intervals/description/
难度:中等
首先将数组按照左端点进行排序,然后如果当前区间左端点 <= 答案中最后一个合并区间的右端点,更新答案区间右端点为两者较大值;反之将当前区间加入答案。
时间复杂度:O(nlogn),其中 n 是 intervals 的长度。瓶颈在排序上。
空间复杂度:O(1)。排序的栈开销和返回值不计入。
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
vector<vector<int>> ans;
for (auto &p: intervals) {
if (!ans.empty() && p[0] <= ans.back()[1]) {
ans.back()[1] = max(ans.back()[1], p[1]);
} else {
ans.emplace_back(p);
}
}
return ans;
}
};