Problem: 56. 合并区间
文章目录
- 题目描述
- 思路及解法
- 复杂度
- Code
题目描述
思路及解法
1.将数组按内部的一维数组的第一项按从小到大的顺序排序;
2.创建二维结果数组merged,并将排序后的数组中的第一个一维度数组存入到merged中;
3.从后面的一维数组开始遍历,并比较:3.1 若后面一个一维数组的左侧值大于merged中的一维数组的右侧值,则直接将当前的一维数组添加到merged中;
3.2 若后面一个一维数组的左侧值小于merged中的一维数组的右侧值,则取出右侧值较大的合并
复杂度
时间复杂度:
O ( n l o g n ) O(nlogn) O(nlogn);其中 n n n为一维数组的个数
空间复杂度:
O ( n ) O(n) O(n)
Code
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() == 0) {
return {};
}
sort(intervals.begin(), intervals.end());
vector<vector<int>> merged;
for (int i = 0; i < intervals.size(); ++i) {
int left = intervals[i][0];
int right = intervals[i][1];
if (merged.empty() || merged.back()[1] < left) {
merged.push_back({left, right});
} else {
merged.back()[1] = max(merged.back()[1], right);
}
}
return merged;
}
};