您的位置:首页 > 其它

LeetCode | Merge Intervals

2013-12-25 16:43 162 查看


题目:

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来排序,然后依次合并相邻的重叠项。


代码:

/**
 * 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 comp(Interval a, Interval b)
    {
        return a.start<b.start;
    }
    vector<Interval> merge(vector<Interval> &intervals) {
        if(intervals.size()==0)
            return *(new vector<Interval>());
        
        sort(intervals.begin(),intervals.end(),comp);
        int cur = 0;
        while(cur<intervals.size()-1)
        {
            if(intervals[cur].end>=intervals[cur+1].start)
            {
                int s = intervals[cur].start;
                int e = intervals[cur].end>intervals[cur+1].end?intervals[cur].end:intervals[cur+1].end;
                intervals.erase(intervals.begin()+cur,intervals.begin()+cur+2);
                intervals.insert(intervals.begin()+cur,*(new Interval(s, e)));
            }
            else
            {
                cur++;
            }
        }
        return intervals;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: