题解 | #合并区间#

合并区间

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

/**
 * struct Interval {
 *	int start;
 *	int end;
 *	Interval(int s, int e) : start(start), end(e) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param intervals Interval类vector 
     * @return Interval类vector
     */
    vector<Interval> merge(vector<Interval>& intervals) {

        //按各区间start升序排序
        sort(intervals.begin(),intervals.end(),
        [](const Interval& a,const Interval& b)->bool{return a.start<b.start;});

        auto p = intervals.begin();
        auto q = p + 1;
        vector<Interval> v;
        int s,e;
        s = p->start;
        e = p->end;
        while(p!=intervals.end()){
            if(e>=q->start&&q!=intervals.end()){//若两区间相交,且q不为尾迭代器,求并集

                if(q->end > e)
                    e = q->end;
                q++;//继续检查p所指区间与更后方区间是否相交

            }else{//若两区间不相交,或q为尾迭代器,将p所指区间存入

                auto copy = *p;
                copy.start = s;
                copy.end = e;
                v.push_back(copy);

                p = q;
                s = p->start;
            e = p->end;
                q++;

            }
        }

        return v;

    }
};

全部评论

相关推荐

人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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