目录
题目:
示例:
分析:
代码:
题目:
示例:
分析:
和昨天的题大差不差,我们仍然是有一堆区间,题目给我们一个新的区间,要我们把新区间插入到原本的区间数组里,并且能合并的要合并。
我们可以直接把新区间放入数组里,接着执行昨天的代码即可,一行都不用改,甚至形参名字都是一样的。
由于本题中原始数组就是按照左区间升序排序,因此我们可以做一个小优化,我们按照左区间升序的这样一个规则插入新区间,这样就不必再对数组进行排序从而减少运行时间了。我们只需要找到原始区间中第一个左区间大于新区间的左区间的区间即可,然后将新区间插入到这个区间的前面,接着再按照昨天的代码。
代码:
class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {//昨天的代码照搬intervals.push_back(newInterval);sort(intervals.begin(),intervals.end(),[](vector<int>a,vector<int>b){return a[0]<b[0];});vector<vector<int>>res;int begin=intervals[0][0],end=intervals[0][1]; //临时变量记录左右区间,初始化为数组第一个元素for(int i=1;i<intervals.size();i++){if(intervals[i][0]>end){ //如果新区间的左区间大于临时的右区间,则发生区间不重合res.push_back({begin,end}); //添加临时变量的区间begin=intervals[i][0],end=intervals[i][1]; //更新两个临时变量}else{end=max(end,intervals[i][1]); //如果区间重合,那么更新临时变量的右区间为较大值}}res.push_back({begin,end});return res;//小小优化一下int index=0;for(;index<intervals.size();index++){if(newInterval[0]<=intervals[index][0]) break;}intervals.insert(intervals.begin()+index,newInterval);vector<vector<int>>res;int begin=intervals[0][0],end=intervals[0][1]; //临时变量记录左右区间,初始化为数组第一个元素for(int i=1;i<intervals.size();i++){if(intervals[i][0]>end){ //如果新区间的左区间大于临时的右区间,则发生区间不重合res.push_back({begin,end}); //添加临时变量的区间begin=intervals[i][0],end=intervals[i][1]; //更新两个临时变量}else{end=max(end,intervals[i][1]); //如果区间重合,那么更新临时变量的右区间为较大值}}res.push_back({begin,end});return res;}
};