看起来非常简单,一顿if-else写了一大堆,搞得自己都出不来了,条件太多,一定要想好再写,各种情况给自己绕晕在里面。浪费时间,浪费脑细胞。
,
所以就要想办法固定一个变量,使得情况减少。将区间左侧的大小固定,先按照左区间进行排序,之后在result中先放一个区间,让原本的区间和这个区间进行比较,如果当前区间的左端点大于result中最后一个区间的右端点,肯定没有重合,之间push_back到result中;相反如果小于,就会有重合,其左端点是不变的(因为本来就是根据左端点进行排序的,当前区间的左端点肯定不会小于result中最后一个区间的左端点,只需要判断右端点),右端点就选择两个区间右端点的较大值。代码如下:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
// 先按照左端点排序
if (intervals.size() == 0) {
return intervals;
}
sort(intervals.begin(),intervals.end());
vector<vector<int>> result;
for(int i=0;i<intervals.size();i++)
{
int L=intervals[i][0],R=intervals[i][1];
if(!result.size()||result.back()[1]<L){
result.push_back({L,R});
}
else
{
result.back()[1]=max(result.back()[1],R);
}
}
return result;
}
};
写法还需要再熟悉一下。