LeetCode56——Merge Intervals

来源:互联网 发布:反电信网络诈骗宣传片 编辑:程序博客网 时间:2024/06/11 16:36

LeetCode56——Merge Intervals

题意:

简单理解就是对区间序列做高中数学里面的并运算。

现在假设几种情况:

[1,2]∪[3,4]的并集表示就是{ [1,2]∪[3,4] } 即,无交集集合的并运算

[1,3]∪[2,4]的并集表示就是{ [1,4] } 即,有交集集合的并运算

[1,4]∪[2,3]的并集表示就是{ [1,4] } 即,有包含关系的集合的并运算


综合上述三种情况:

1.第二种和第三种是可以合并的。根据这两种情况,编写可以合并的代码,对整个序列遍历合并。

2.在此之前需要对序列中的元素按照start的值从小到大排序。

结合上述1.2代码如下:

bool cmp(const Interval &a, const Interval &b){return a.start < b.start;}class Solution {private:bool canMerge(Interval &a, Interval &b)//可以合并的情况{if (a.end >= b.start&&a.end<=b.end){a.end = b.end;return true;}else if (a.end > b.end){return true;}return false;}public:vector<Interval> merge(vector<Interval>& intervals) {int i = 0;int j;vector<Interval>result;sort(intervals.begin(), intervals.end(),cmp);while (i < intervals.size()){j = i+1;while (j<intervals.size()&&canMerge(intervals[i], intervals[j]))j++;result.push_back(intervals[i]);i = j;//一次合并完成,更新判断起点}return result;}};




0 0
原创粉丝点击