Leetcode Merge Intervals

OpenSoucre發表於2014-07-05

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].

 題目的意思是將相交得區間合併,典型的貪心演算法

首先將區間先按照start進行排序,

然後儲存先前區間的start和end

如果當前的start > 先前的end,說明當前的區間與之前的區間不想交,則將先前的區間放入結果中,同時更新start和end

如果當前的start < 先前的end,說明當前的區間與先前的區間相交,故比較當前的end與先前的end,如果當前的end大於先前的end,則更新先前的end為當前的end

 

bool cmp(const Interval& a, const Interval& b){
    if(a.start!=b.start) return a.start < b.start;
    else return a.end < b.end;
}

class Solution {
public:
    vector<Interval> merge(vector<Interval> &intervals) {
        sort(intervals.begin(), intervals.end(), cmp);
        vector<Interval> res;
        if(intervals.size() == 0) return res;
        int start = intervals[0].start, end = intervals[0].end;
        for(int i = 1 ; i <  intervals.size(); ++ i){
            if(intervals[i].start > end){
                res.push_back(Interval(start,end));
                start = intervals[i].start, end = intervals[i].end;
            }else{
                end = max(end, intervals[i].end);
            }
        }
        res.push_back(Interval(start,end));
        return res;
    }
};

 

 

 

 

相關文章