想象一下,先将New 放在那里,然后将所有原来的Interval一个一个加过去。用Curr表示现在在处理哪一个Interval
有三种情况:
1. Curr 在New的左边
直接加Curr
2. Curr 在New的右边
加New, 将Curr设置为New
3. Curr 与New 重合
2者可以合并为新的New.
全部扫完后,再将New 加上去就行了,以下就是代码实现:
/**
* 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; }
* }
*/
public class Solution {
public ArrayList
insert(ArrayList
intervals, Interval newInterval) {
ArrayList
result = new ArrayList
();
Interval newInsert = newInterval;
for (int i = 0; i < intervals.size(); i ++){
Interval curr = intervals.get(i);
// if the NEW is bigger than curr
if (curr.end < newInsert.start){
result.add(curr);
// if the New is smaller than curr.
} else if (newInsert.end < curr.start) {
result.add(newInsert);
newInsert = curr;
} else {
newInsert.end = Math.max(newInsert.end, curr.end);
newInsert.start = Math.min(newInsert.start, curr.start);
}
}
result.add(newInsert);
return result;
}
}