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;
}
};