这题我记得是海大20年的真题
思路也不是什么算法,感觉在考场现场想不是很现实,还是得提前做过
leetcode官方解答:
我们用数组 merged 存储最终的答案。
首先,我们将列表中的区间按照左端点升序排序。然后我们将第一个区间加入 merged 数组中,并按顺序依次考虑之后的每个区间:
如果当前区间的左端点在数组 merged 中最后一个区间的右端点之后,那么它们不会重合,我们可以直接将这个区间加入数组 merged 的末尾;
否则,它们重合,我们需要用当前区间的右端点更新数组 merged 中最后一个区间的右端点,将其置为二者的较大值。
总体上来说,就是先排个序,让后如果设的vector没有或者当新的数组[i][0]>vector中back[1],就把他放进去。让后不断维护这个最右边的数值
思路看完不难,但是考场现想也不容易。至少对我不现实
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.size()==0){
return {};
}
vector<vector<int>> v;
sort(intervals.begin(),intervals.end());
for(int i=0;i<intervals.size();i++){
int L=intervals[i][0];
int R=intervals[i][1];
if(!v.size()||intervals[i][0]>v.back()[1]){
v.push_back({L,R});
}
else{
v.back()[1]=max(v.back()[1],R);
}
}
return v;
}
};