我们将区间按左区间进行排序,然后比较l区间和r区间是否存在交集

当存在交集时,我们更新当前l区间的end值,直到区间不存在交集。
循环结束说明已经完成了一个区间的合并,我们将此时l区间存下来,并把l移动到r的位置开始下一个区间的合并

/**
 * struct Interval {
 *	int start;
 *	int end;
 *	Interval(int s, int e) : start(start), end(e) {}
 * };
 */
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param intervals Interval类vector 
     * @return Interval类vector
     */
    vector<Interval> merge(vector<Interval>& intervals) {
        int l=0,r=0;
        vector<Interval>ans;
        //按照左区间排序,相同时排序较小的右区间
        sort(intervals.begin(),intervals.end(),[&](Interval&i,Interval&j){
            return i.start == j.start? i.end < j.end : i.start < j.start;
        });
        int n=intervals.size();
        while(r<n){
			//合并区间有交集的
            while(r<n && intervals[r].start <= intervals[l].end ){
                intervals[l].end=max(intervals[l].end,intervals[r].end);
                r++;
            }
            ans.push_back(intervals[l]);
            l=r;
        }
        return ans;
    }
};

周周打卡图粘贴处 alt