解法1:
这个主要是考察的排序,这里直接在原数组上操作,空间复杂度O1, 时间复杂度有可能是on2,因为有erase 操作。。
bool cmp(vector<int>& a, vector<int>& b){
return a[0] < b[0];
}
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<int> tmp;
vector<vector<int>> all;
if(intervals.size() <= 1) return intervals;
sort(intervals.begin(), intervals.end(), cmp);
int length = intervals.size();
for(int i = 0; i < length-1; i++){
if(intervals[i][1] >= intervals[i+1][0]){
intervals[i][1] = max(intervals[i][1], intervals[i+1][1]);
intervals.erase(intervals.begin() + i + 1);
length--;
i--;
}
else{
continue;
}
}
return intervals;
}
};
解法2:这个参考了别人的解法,是O(n) 的时间复杂度。O1的空间复杂度。
bool cmp(vector<int>& a, vector<int>& b){
return a[0] < b[0];
}
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<int> tmp;
vector<vector<int>> all;
if(intervals.size() <= 1) return intervals;
sort(intervals.begin(), intervals.end(), cmp);
for(int i = 0; i < intervals.size(); i++){
tmp = intervals[i];
while(i+1 < intervals.size() && tmp.back() >= intervals[i+1].front()){
tmp.back() = max(tmp.back(), intervals[i+1].back());
i++;
}
all.push_back(tmp);
}
return all;
}
};