s4553711
4/6/2017 - 3:21 PM

56.cpp

/**
 * 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 {
    static bool comp(Interval x, Interval y) {
        return x.start < y.start || (x.start == y.start && x.end < y.end);
    }
public:
    vector<Interval> merge(vector<Interval>& intervals) {
        vector<Interval> result;
        if (intervals.size() == 0) return result;

        sort(intervals.begin(), intervals.end(), Solution::comp);
        
        int n_st = intervals[0].start, n_end = intervals[0].end;
        for(int i = 1; i < intervals.size(); i++) {
            if (intervals[i].start <= n_end) {
                if (intervals[i].end > n_end)
                    n_end = intervals[i].end;
            } else {
                result.push_back(Interval(n_st, n_end));
                n_st = intervals[i].start, n_end = intervals[i].end;
            }
        }
        result.push_back(Interval(n_st, n_end));
        return result;
    }
};