难度:中等。
标签:排序,数组。
需要将intervals按照每个子vector的第一个数进行排序,然后再进行判断,合并重叠的区间。
正确解法:
class Solution {
static bool cmp(const vector<int>& a, const vector<int>& b){
return a[0] < b[0];
}
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int n = intervals.size();
if(n <= 1)return intervals;
sort(intervals.begin(), intervals.end(), cmp);
vector<vector<int>> result;
for(int i = 0; i < n; i++){
int left = intervals[i][0], right = intervals[i][1];
int j = i + 1;
for(; j < n; j++){
if(intervals[j][0] <= right){
right = max(right, intervals[j][1]);
}
else break;
}
result.push_back({left, right});
i = j - 1;
}
return result;
}
};
结果: