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].
[Thoughts]:
public class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
List<Interval> res = new ArrayList<Interval>();
if(newInterval==null)
return intervals;
Interval pre = newInterval;
int index = 0;
Interval cur;
while(index < intervals.size()){
cur = intervals.get(index);
if(pre.end < cur.start){
res.add(pre);
pre = cur;
}else if(pre.start > cur.end)
res.add(cur);
else{//当有重叠时,new一个新的interval对象
pre = new Interval(Math.min(pre.start, cur.start), Math.max(pre.end, cur.end));
}
index++;
}
res.add(pre);//不要忘了加pre
return res;
}
}
后来看到这个解法,觉得很棒。利用iterator,不用额外的空间。
public class Solution {//10:04
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
ListIterator<Interval> iterator = intervals.listIterator();
while(iterator.hasNext()){
Interval cur = iterator.next();
if(newInterval.end < cur.start){
iterator.previous();
iterator.add(newInterval);
return intervals;
}else if(newInterval.start > cur.end)
continue;
else{
newInterval.start = Math.min(newInterval.start, cur.start);
newInterval.end = Math.max(newInterval.end, cur.end);
iterator.remove();
}
}
intervals.add(newInterval);
return intervals;
}
}
No comments:
Post a Comment