LeetCode | Merge Intervals(合并区间间隔)
2014-08-18 11:26
393 查看
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
题目解析:
由于输入的数据不一定有序,就要先对原始数据按照起始范围排序。那么如何排序呢?sort()有一个三个参数的函数,第三个参数是一个函数指针,指向的函数定义了排序时应该按照的关键字,以及排序的方式(递增还是递减)
这样定义,就是按照第一个元素排序,并且按照递增的顺序排。
排好序后,就容易是数组合并了,当a[i].start > tmp.end的时候,就将tmp放入输出容器中,并以a[i]为新的tmp与后面的进行合并。
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; } };
相关文章推荐
- LeetCode-56 Merge Intervals(合并区间)
- 【LeetCode-面试算法经典-Java实现】【056-Merge Intervals(区间合并)】
- [Leetcode] merge intervals 合并区间
- leetcode-56 Merge Intervals 合并区间
- Merge Intervals 合并区间@LeetCode
- 【LeetCode-面试算法经典-Java实现】【056-Merge Intervals(区间合并)】
- LeetCode-Merge Intervals-合并区间
- [LeetCode] Merge Intervals 合并区间
- leetcode 352. Data Stream as Disjoint Intervals 区间合并
- 每天一道LeetCode-----将间隔集中有重叠的间隔合并
- leetcode 56. Merge Intervals 区间合并
- leetcode合并区间
- leetcode:Merge Intervals(合并相交集合) 【面试算法题】
- [leetcode] 区间合并问题 Merge Interval
- LeetCode OJ 之 Merge Intervals(合并区间)
- Merge Intervals(区间合并)
- Leetcode #56. Merge Intervals 间隔合并 解题报告
- Insert Interval (区间的覆盖合并) 【leetcode】
- leetcode合并时间区间
- leetcode—有关区间合并