给出一个无重叠的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
样例
插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。
插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。
/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
*/
class Solution {
/**
* Insert newInterval into intervals.
* @param intervals: Sorted interval list.
* @param newInterval: A new interval.
* @return: A new sorted interval list.
*/
public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
ArrayList<Interval> result = new ArrayList<Interval>();
//如果带插入的区间为空,则返回插入区间
if(intervals.isEmpty()){
result.add(newInterval);
return result;
}
int pos =0;
//遍历循环list
for(int i=0;i<intervals.size();i++){
Interval cur = intervals.get(i);
if(cur.end<newInterval.start){//如果插入的新区间比当前区间要大,那么先add当前区间到result中,并将标记位后移一位
result.add(cur);
pos++;
}else if(cur.start>newInterval.end){//相反地,直接将当前区间add到result中
result.add(cur);
}else{
newInterval.start = Math.min(cur.start,newInterval.start);
newInterval.end = Math.max(cur.end,newInterval.end);
}
}
//利用add方法在指定的pos插入newInterval
result.add(pos,newInterval);
return result;
}
}
总结
这种类型的题目可以自己拿出笔多画一画看看到底有多少种情况