题解 | #合并区间#

合并区间

http://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a

  1. 首先对区间首端点从小到大进行排序。然后如果开始端点相同,end按照降序排列
  2. 脑子中画出这些排序的区间,由底到高画。
  3. 一共就分为3中情况,最后一种覆盖又分为起始点不同的覆盖,以及起始点相同的覆盖。
  4. 对于延长区间只有一种情况,就是第二段的end比最后一段end长,这时候直接更新已有end就行。
/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> merge(vector<Interval> &intervals) {

        sort(intervals.begin(),intervals.end(),[](Interval a, Interval b){
            if(a.start==b.start){
                return a.end > b.end;
            }else{
                return a.start< b.start;
            }
        });

        vector<Interval> res;

        for(int i =0; i< intervals.size();i++){
            if(res.empty() || res.back().end< intervals[i].start){//为空或者是end 大于start,不可能相交
                res.push_back(intervals[i]);//放入
            }else{
                if(res.back().end< intervals[i].end){
                    res.back().end = intervals[i].end;//满足合并条件,更新end位置
                }
            }
        }


        return res;



    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论
请问大佬为什么不能直接sort排序?sort(intervals.begin(),intervals.end());
点赞 回复 分享
发布于 2022-02-22 20:37

相关推荐

10-20 14:22
门头沟学院 Java
点赞 评论 收藏
分享
kabuu:问多了怕遇到聪明人坑不了了,说不定里面很坑呢,还是相信自己的选择吧
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务