Iterate the intervals list. Compare newInterval with each item in the list. If overlapping, update the item. Otherwise(no overlapping), add newInterval into list. Then delete duplicates or merge overlapping iterms.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Interval {
int start, end;
Interval() { start = 0; end = 0; }
Interval(int s, int e) { start = s; end = e; }
}
public class InsertInterval {
class MyComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
//
Interval i1 = (Interval) o1;
Interval i2 = (Interval) o2;
if(i1.start < i2.start) return -1;
if(i1.start > i2.start) return 1;
if(i1.start == i2.start && i1.end < i2.end) return -1;
if(i1.start == i2.start && i1.end > i2.end) return 1;
return 0;
}
}
public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
//
ArrayList<Interval> result = new ArrayList<Interval>();
boolean flag = false;
for(int j = 0; j < intervals.size(); j++) {
if(newInterval.start > intervals.get(j).end || newInterval.end < intervals.get(j).start)
continue;
if(newInterval.start >= intervals.get(j).start && newInterval.end <= intervals.get(j).end)
continue;
Interval cur = intervals.get(j);
cur.start = newInterval.start < intervals.get(j).start ? newInterval.start :intervals.get(j).start;
cur.end = newInterval.end > intervals.get(j).end ? newInterval.end : intervals.get(j).end;
flag = true;
}
if(!flag) intervals.add(newInterval);
Collections.sort(intervals, new MyComparator());
for(int j = 0; j < intervals.size(); j++) {
Interval cur = intervals.get(j);
if(result.isEmpty()) {
result.add(cur);
} else {
Interval last = result.get(result.size() - 1);
if(last.end < cur.start) {
result.add(cur);
} else {
last.end = last.end > cur.end ? last.end : cur.end;
}
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
//
ArrayList<Interval> t = new ArrayList<Interval>();
t.add(new Interval(2,5));
t.add(new Interval(6,7));
t.add(new Interval(8,9));
InsertInterval ii = new InsertInterval();
ii.insert(t, new Interval(5,7));
}
}