题解 | #合并区间#

合并区间

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

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务