在做题中学习(89):合并区间
解法:模拟 + 排序
思路:先画出两个示例的简图
发现如果前一个数组的第二个元素 > = 后一个数组的第一个元素即可合并v[i][0],v[i+1][1]。但是,示例中的数组都是按内部数组的第一个元素进行排序过的,如果无序,这个判断就没有意义,因此需要先排序,而合并时还有一种情况:
因此,虽然符合合并规则,但是加入进返回的ret数组中时,就不能单纯的组合头和尾,而应该取v[i][1]和v[i+1][1]的更大值。
附上完整代码:
class Solution
{
public:vector<vector<int>> merge(vector<vector<int>>& v) {sort(v.begin(),v.end());vector<vector<int>> ret;for(auto& e : v){if(ret.size() && ret.back()[1] >= e[0])ret.back()[1] = max(ret.back()[1],e[1]);elseret.push_back(e);}return ret;}
};