Insert Interval
// case 1: add org
// org: ----
// new: ==
// case 2: add new, add org
// org: ----
// new: ==
// case 3: add nothing, revise new
// org: -------...
// new: =====...
// key point: use newInterval to cover original interval, modify the new interval
public List<Interval> insert(List<Interval> intervals, Interval newI) {
List<Interval> res = new ArrayList<>();
for(Interval i: intervals) {
if(newI==null || i.end < newI.start) { //newInterval has been merged or newInteval is not come yet
res.add(i);
}else if(newI.end<i.start){//newInterval should be added, current interval should be add
res.add(newI);
newI = null;
res.add(i);
}else { // newInterval is not end yet, keep searching next
newI.start = Math.min(newI.start, i.start);
newI.end = Math.max(newI.end,i.end);
}
}
if(newI!=null) res.add(newI);
return res;
}
Similar Question: Merge Intervals (LC 56)
public List<Interval> merge(List<Interval> intervals) {
Collections.sort(intervals,(a,b)->a.start-b.start);
List<Interval> res = new ArrayList<>();
Interval lastI = null;
for(Interval i:intervals) {
if(lastI == null) {
lastI = i;
}else if(lastI.end<i.start) {
res.add(lastI);
lastI = i;
}else {
lastI.end = Math.max(i.end,lastI.end);
}
}
if(lastI != null) res.add(lastI);
return res;
}
Last updated