(贪心 合并区间)leetcode 56
思路来源:代码随想录--代码随想录_合并区间题解
首先用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]);
}
else
ans.push_back(intervals[i]);
}
return ans;
}
};
intervals的长度是>=1的不需要等于0直接返回的判断