题目描述
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
测试样例
Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
题目思路
题目大意在在给定不相交的区间,添加一个新的区间,并将该区间合并到原来给定的区间,得到新的不相交区间的集合。
解题的关键就是如果新的区间和原来的区间相交,就扩大该区间,简单就是说
if newInterval is overlapped with oldInterval
then newInterval.start=min(newInterval.start,oldInterval.start);
newInterval.end=max(newInterval.end,oldInterval.end);
/**
* 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> insert(vector<Interval>& intervals, Interval newInterval) {
vector<Interval> result;
auto it=intervals.begin();
for(;it!=intervals.end();it++)
{
if(it->end<newInterval.start)
{
result.push_back(*it);
}else if(it->start>newInterval.end)
{
break;
}else
{
newInterval.start=min(newInterval.start,it->start);
newInterval.end = max(newInterval.end,it->end);
}
}
result.push_back(newInterval);
for(;it!=intervals.end();it++)
{
result.push_back(*it);
}
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> insert(List<Interval> intervals, Interval newInterval) {
List<Interval>result = new ArrayList<Interval>();
Interval it;
int i=0;
for(;i<intervals.size();i++)
{
it=intervals.get(i);
if(it.end<newInterval.start){
result.add(it);
}else if(it.start>newInterval.end){
break;
}else{
newInterval.start=Math.min(newInterval.start,it.start);
newInterval.end=Math.max(newInterval.end,it.end);
}
}
result.add(newInterval);
for(;i<intervals.size();i++)
{
it=intervals.get(i);
result.add(it);
}
return result;
}
}
“
说明,上面的代码c++采用值拷贝,而java采用引用添加,对于大量数据,可能java的运行效率会更高。
该题是简单题
`
“`