• 先按照区间左端点进行排序;
  • 记录区间初始值,用于后续区间重合判断;
  • 如果当前区间左端点值小于等于初始区间的右端点值,则两个区间重合,更新初始区间的右端点值;
  • 否则将不重合区间值放入结果;
  • 如果最后一个区间未重合,将区间值加入结果。
/**
 * 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:
    static bool cmp(Interval a, Interval b) {
        return a.start < b.start;
    }
    vector<Interval> merge(vector<Interval> &intervals) {
        vector<Interval> result;
        if (intervals.size() == 0) return result;
        sort(intervals.begin(), intervals.end(), cmp);
        bool flag = false;
        int len = intervals.size();
        for (int i = 1; i < len; i++) {
            int start = intervals[i - 1].start;
            int end = intervals[i - 1].end;
            while (i < len && intervals[i].start <= end) {
                end = max(intervals[i].end, end);
                if (i == len - 1) flag = true;
                i++;
            }
            result.push_back({start, end});
        }
        if (flag == false) {
            result.push_back({intervals[len - 1].start, intervals[len - 1].end});
        }
        return result;
        
    }
};