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

 

A: 先按interval的start排序,后顺序扫描进行merge

    vector<Interval> merge(vector<Interval> &intervals) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<Interval> res;
        if(intervals.empty())
            return res;
        
        sort(intervals.begin(),intervals.end(),cmp);
        
        res.push_back(intervals[0]);
        
        int cur = 0;
        for(int i=0;i<intervals.size();i++)
        {
            if(intervals[i].start<=res[cur].end)
                res[cur].end = max(res[cur].end,intervals[i].end);
            else
            {
                res.push_back(intervals[i]);
                cur++;
            }
                
        }
        return res;
    }
    
    int cmp(const Interval& t1,const Interval& t2)
    {
        return (t1.start<t2.start);
    }

  

posted @ 2013-09-16 10:07  summer_zhou  阅读(140)  评论(0编辑  收藏  举报