首先根据每个区间的起始位置值进行排序,然后遍历排序好的所有区间,设置一个活跃区间cur,并与下一个区间的范围进行比较,当可以扩展cur时对cur进行扩展,否则将cur加入到结果中。注意遍历完之后还剩一个区间,也要加入到结果集中。

/**
 * 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:
    vector<Interval> merge(vector<Interval> &intervals) {
        vector<Interval> result{};
        if(intervals.empty()) return result;
        auto cmp=[](Interval& a,Interval& b){return a.start<b.start;};
        sort(intervals.begin(),intervals.end(),cmp);
        Interval cur=intervals[0];
        for(int i=1;i<intervals.size();i++){
            if(cur.end>=intervals[i].start){
                if(cur.end<intervals[i].end) cur.end=intervals[i].end;
            }
            else{
                result.push_back(cur);
                cur.start=intervals[i].start;
                cur.end=intervals[i].end;
            }
        }
        result.push_back(cur);
        return result;
    }
};