题解 | #合并区间#

合并区间

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

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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