题目描述
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].
算法思路
该题的解法就是根据区间的起点从小到大排序,依次遍历,将新的区间与当前集合的最后插入的区间进行比较,若不相交或被包含,则插入新的区间,否则,拓展当前集合的最后插入的区间的终点。
c++代码
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
if(intervals.empty())
return vector<Interval>{};
vector<Interval>result;
sort(intervals.begin(),intervals.end(),[](Interval a,Interval b){return a.start<b.start;});
result.push_back(intervals[0]);
for(int i=1;i<intervals.size();i++)
{
if(result.back().end<intervals[i].start)
{
result.push_back(intervals[i]);
}else
{
result.back().end=max(intervals[i].end,result.back().end);
}
}
return result;
}
};
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
class Solution {
public List<Interval> merge(List<Interval> intervals) {
if(intervals==null||intervals.size()<=1)
return intervals;
intervals.sort((i1,i2)->Integer.compare(i1.start,i2.start));
List<Interval> result = new LinkedList<Interval>();
int start = intervals.get(0).start;
int end = intervals.get(0).end;
for(Interval in:intervals)
{
if(in.start<end)
{
end=Math.max(end,in.end);
}else
{
result.add(new Interval(start,end));
start=in.start;
end=in.end;
}
}
result.add(new Interval(start,end));
return result;
}
}
该题为简单题