题解 | #合并区间#

合并区间

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

/**
 * 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:
    //定义一个比较器
    //按照start从小到大排序
   static bool cmp(Interval a,Interval b){
        return a.start<b.start;
    }
    vector<Interval> merge(vector<Interval> &intervals) {
        sort(intervals.begin(), intervals.end(),cmp);//按照start从小到大排序
        vector<Interval> res;//结果数组
        if(intervals.size()<=0)
            return res;
        if(intervals.size()==1){
            return intervals;
        }
        //这两个变量暂存当前区间的左右边界大小
        int start=intervals[0].start;
        int end=intervals[0].end;
        for(int i=1;i<intervals.size();i++){
            int leftP=intervals[i].start;
            int rightP=intervals[i].end;
            if(leftP>=start&&leftP<=end){//说明这两个区间是有交集的,也即可以合并这两个区间
                end=end>rightP?end:rightP;//更新区间的右边界
            }
            else{//说明这两个区间并无交集,此时可以把[start,end]这个区间放入res中了
                Interval tmp(start,end);
                res.push_back(tmp);
                //此时最新区间应该是intervals[i]这个区间的左右边界
                start=intervals[i].start;
                end=intervals[i].end;
            }
        }
        //最后还要把[start,end]这个区间放进去
        Interval tmp(start,end);
        res.push_back(tmp);
        return res;
    }
};
全部评论
所以这题题目中的最优解怎么写??很好奇
点赞 回复 分享
发布于 2022-04-18 20:52

相关推荐

2本硕,在这一个下午真的绷不住了,浪费了太多时间,现在的技术栈还停在C语言和stm32上,找嵌入式的实习面试被拷打,找杭州的一个也找不到,真的心里难受,linux没学过,研二了开始慌了。
一条淡水魚:嵌入式这行的面试我认为实际项目比较重要,技术栈简单的提一嘴就行,面试官在乎的关键点在于你用了这些技术做了哪些工作解决了什么问题,而不是停留在离散的那些个技术栈上,那除了教课没有意义,好比你提到的c语言和32,你用32做过哪些具体的项目?接触过什么外设?使用过哪些公司的SDK?有没有实际产品落地?以及各种只有进入真正的生产环节当中才会积累到的经验......主动去和面试官讨论这些实际的问题,甚至还能就某个具体参数的合理性与他去简单探讨一下,只要技术栈对口,基本上就稳啦~(另外linux和RTOS是嵌入式的标配哦,选一个方向走下去吧)
点赞 评论 收藏
分享
2025-12-19 15:04
门头沟学院 Java
小肥罗:hr爱上你了,你负责吗哈哈
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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