/**
 * 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) {
        // write code here
        int n = intervals.size();
        vector<Interval> ans;
        if(n==0)
            return ans;
        sort(intervals.begin(), intervals.end(), [](Interval a, Interval b){
                if(a.start!=b.start)
                    return a.start<b.start;
                else
                    return a.end < b.end;
        });

        int start = intervals[0].start;
        int end = intervals[0].end;

        for(auto interval:intervals)
        {
            // cout << start << ", " << end << ", " << interval.start << ", " << interval.end << endl;
            // 没有交集
            if(end < interval.start)
            {
                ans.emplace_back(Interval(start,end));
                // 新的开始
                start = interval.start;
                end = interval.end;
            }
            // 有交集
            else
             {
                start = min(start, interval.start);
                end = max(end, interval.end); 
             };
            
        }

        // intervals 最后的一个位置比较后单独处理
        ans.emplace_back(Interval(start,end));

        return ans;
    }
};