我想复杂了,之前想直接在原数组上操作,可是这就涉及到了删除元素之类的
应该开一个新的数组
判断重叠的方法还是一样的
如果重叠,就合并,(与上一个合并
如果不重叠,就直接加入该数组
这里很巧妙的点是:
res.back() 的使用,返回的是一个数组,可以直接操作
这里合并的操作就是,直接修改右边界,在一维数组中修改
注意:
1. 更新右边界 是 更新最大的 ( 之前是更新更小的那个,是为了之后比较是否重叠
2. 判断条件 是 有等于号的
class Solution {
public:
static bool cmp(const vector<int> &a, const vector<int> &b)
{
return a[0] < b[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), cmp);
vector<vector<int>> res;
res.push_back(intervals[0]); //先放入一开始的数组,方便之后合并
for(int i = 1; i < intervals.size(); i++)
{
if(intervals[i][0] <= res.back()[1])
res.back()[1] = max(intervals[i][1], res.back()[1]);
else
res.push_back(intervals[i]);
}
return res;
}
};