合并区间

来源:互联网 发布:阿里云服务器请求超时 编辑:程序博客网 时间:2024/06/05 05:01

1.问题描述

给出若干闭合区间,合并所有重叠的部分。

样例

给出的区间列表 => 合并后的区间列表:

[                     [  [1, 3],               [1, 6],  [2, 6],      =>       [8, 10],  [8, 10],              [15, 18]  [15, 18]            ]]

2.解题思路

先对每个区间按开始排序,再进行合并。

3.代码实现

/**
 * Definition of Interval:
 * classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this->start = start;
 *         this->end = end;
 *     }
 */
 bool com(const Interval&a,const Interval&b)
 {
     return a.start<b.start;
 }
class Solution {
public:
    /**
     * @param intervals: interval list.
     * @return: A new interval list.
     */
    vector<Interval> merge(vector<Interval> &intervals) {
        // write your code here
        sort(intervals.begin(),intervals.end(),com);
        int n=intervals.size();
        int i=0,j=0;
        while(i+1<n-j)
        {
            if(intervals[i].end<intervals[i+1].start)
              i++;
              else {if(intervals[i].end<intervals[i+1].end)
                   { intervals[i+1].start=intervals[i].start;
                   intervals.erase(intervals.begin()+i);
                   }
                   else {
                       intervals.erase(intervals.begin()+i+1);
                   }
                   j++;
        }
        }
        return intervals;
    }
};

4.感想

注意要自定义函数,并定义在类外。

原创粉丝点击