题目链接:https://leetcode-cn.com/problems/merge-intervals/
题目描述
思路
1 排序+贪心
(1)首先按照区间尾进行排序
(2)从后往前进行遍历:
如果 intervals[i-1][1]>= intervals[i][0]
则必然两个区间有重叠
将合并后的区间头尾赋值到 intervals[i-1]
复杂度分析:
- 时间复杂度:O(nlogn)
- 空间复杂度:O(1)
代码
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.empty() || intervals[0].empty()) return intervals;
sort(intervals.begin(),intervals.end(), cmp);
for (int i = intervals.size()-1; i >0 ; --i) {
if(intervals[i-1][1]>= intervals[i][0]){
intervals[i-1][1] = intervals[i][1];
intervals[i-1][0] = min(intervals[i-1][0], intervals[i][0]);
intervals.erase(intervals.begin()+i);
}
}
return intervals;
}
private:
static bool cmp(const vector<int> &a, const vector<int> &b){
if(a[1] == b[1])
return a[0] < b[0];
return a[1]<b[1];
}
};