您的位置:首页 > 其它

LeetCode | Merge Intervals(合并区间间隔)

2014-08-18 11:26 393 查看
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]
.
题目解析:
由于输入的数据不一定有序,就要先对原始数据按照起始范围排序。那么如何排序呢?sort()有一个三个参数的函数,第三个参数是一个函数指针,指向的函数定义了排序时应该按照的关键字,以及排序的方式(递增还是递减)

static bool compareInterval(const Interval& a, const Interval& b)
{
return a.start < b.start;
}


这样定义,就是按照第一个元素排序,并且按照递增的顺序排。

排好序后,就容易是数组合并了,当a[i].start > tmp.end的时候,就将tmp放入输出容器中,并以a[i]为新的tmp与后面的进行合并。

class Solution {
public:
static bool compareInterval(const Interval& a, const Interval& b){
return a.start < b.start;
}

vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
if(intervals.size() > 0){
sort(intervals.begin(), intervals.end(), compareInterval);
Interval temp = intervals.at(0);
for(int i = 1; i < intervals.size(); ++i){
if(intervals.at(i).start > temp.end){
ret.push_back(temp);
temp = intervals.at(i);
}else
temp.end = max(temp.end, intervals.at(i).end);
}
ret.push_back(temp);
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: