import java.util.*;
class Interval{
int start;
int end;
Interval(int a, int b){
start=a;
end=b;
}
}
public class MyDemo{
public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval){
ArrayList<Interval> res=new ArrayList<Interval>();
if(intervals==null || newInterval == null){
return intervals;
}
if(intervals.size()== 0){
intervals.add(newInterval);
return intervals;
}
ListIterator<Interval> it = intervals.listIterator();
while(it.hasNext()){
Interval tempInterval = it.next();
if (newInterval.end < tempInterval.start){
it.previous();
it.add(newInterval);
return intervals;
} else {
if (tempInterval.end < newInterval.start){
continue;
}else{
newInterval.start=Math.min(tempInterval.start,newInterval.start);
newInterval.end=Math.max(tempInterval.end, newInterval.end);
it.remove();
}
}
}
intervals.add(newInterval);
return intervals;
}
public static void main(String[] args){
ArrayList<Interval> testInterval=new ArrayList<Interval>();
testInterval.add(new Interval(1,5));
testInterval.add(new Interval(6,10));
Interval testTempInterval=new Interval(4,6);
ArrayList<Interval> result=new ArrayList<Interval>();
MyDemo demo=new MyDemo();
result = demo.insert (testInterval, testTempInterval);
for(int i=0;i<result.size();i++)
{
Interval tmpI = result.get(i);
System.out.println("["+tmpI.start+","+tmpI.end+"]");
}
}
}
c++
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
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>::iterator it=intervals.begin();
vector<Interval>::iterator it_head = it;
while(it!=intervals.end()){
if(newInterval.end < it->start){
it=intervals.erase(it_head,it);
intervals.insert(it,newInterval);
return intervals;
}else if(newInterval.start>it->end){
it++;
it_head++;
}else {
newInterval.start=min(newInterval.start,it->start);
newInterval.end=max(newInterval.end,it->end);
it++;
}
}
if(it_head!=it )
it=intervals.erase(it_head,it);
intervals.insert(intervals.end(), newInterval);
return intervals;
}
};
int main(){
int a,b,n;
vector<Interval> itv;
Solution s;
cin>>n;
while(n--){
cin>>a>>b;
itv.push_back(Interval(a,b));
}
cin>>a>>b;
itv=s.insert(itv,Interval(a,b));
for(vector<Interval>::iterator it = itv.begin();it!=itv.end();it++)
cout<<it->start<<" , "<<it->end<<endl;
return 0;
}