主页 > 人工智能  > 

(贪心合并区间)leetcode56

(贪心合并区间)leetcode56

思路来源:代码随想录--代码随想录_合并区间题解

首先用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直接返回的判断

标签:

(贪心合并区间)leetcode56由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“(贪心合并区间)leetcode56