Monday, January 19, 2015

Merge Intervals

Q:
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

T:
First sort the intervals by each start value. Then merge the intervals from the beginning. Once we cannot keep merging, push a new interval to the return vector, keep trying merging the following ones.

A:


/**
 * 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 compare(const Interval & inter1, const Interval & inter2) {
        if(inter1.start < inter2.start) {
            return true;
        } else {
            return false;
        }
    }
    vector< Interval > merge(vector< Interval > &intervals) {
        vector< interval > ret;
        if(intervals.size() == 0) {
            return ret;
        }
        sort(intervals.begin(), intervals.end(), compare);
        
        Interval inter = intervals[0];
        for(int i=1; i < intervals.size(); i++) {
            if(inter.end >= intervals[i].start) {
                inter = Interval(inter.start, max(inter.end, intervals[i].end));
            } else {
                ret.push_back(inter);
                inter = intervals[i];
            }
        }
        ret.push_back(inter);
        return ret;
    }
};

No comments:

Post a Comment