免费网站建站+凡科建站网站工具查询
思路来源:代码随想录--代码随想录_合并区间题解
首先用lambda 按照左界值升序排序
建立答案的二维数组,将第一个行区间放入,判断从第二行开始
第i行的左区间一定大于第i-1行的左区间(排序过了),所以只判断ans的右区间和intervals的左区间:
如果前者大于后者,就合并, 否则就把后者放入ans,将后者与intervals的区间判断是否合并。
(每次判断只判断ans最后的区间也就是ans.back()[1])
具体如何合并呢?
改变ans.back()[1]的值就行了:取ans back()的右区间和interval i的右区间的最大值
代码如下:
class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(),intervals.end(),[](const auto &a,const auto &b){
return a<b;});vector<vector<int>>ans;int n=intervals.size();if(intervals.size()==1)return intervals;ans.push_back(intervals[0]);for(int i=1;i<n;i++){if(intervals[i][0]<=ans.back()[1]){ans.back()[1]=max(ans.back()[1],intervals[i][1]);}elseans.push_back(intervals[i]);}
return ans;}
};
intervals的长度是>=1的不需要等于0直接返回的判断