publicint[][]insert(int[][] intervals,int[] newInterval){if(intervals.length ==0)returnnewint[][]{newInterval};// find start position 以logn的时间查找int start = newInterval[0];// 复制一个新的数组List<int[]> ret =newArrayList<int[]>();int i =0;// i 退出时,表示第一个大于newInterval[0]for(; i < intervals.length; i++){if(intervals[i][0]< newInterval[0])
ret.add(intervals[i]);elsebreak;}// insert the new intervalint l = newInterval[0];int r = newInterval[1];if(ret.size()==0|| ret.get(ret.size()-1)[1]< l)
ret.add(newint[]{l, r});else
ret.get(ret.size()-1)[1]=Math.max(r, ret.get(ret.size()-1)[1]);// insert the old intervalsfor(int j = i; j < intervals.length; j++){
l = intervals[j][0];
r = intervals[j][1];if(ret.size()==0|| ret.get(ret.size()-1)[1]< l)
ret.add(newint[]{l, r});else
ret.get(ret.size()-1)[1]=Math.max(r, ret.get(ret.size()-1)[1]);}return ret.toArray(newint[ret.size()][]);}
思路2
publicint[][]insert(int[][] intervals,int[] newInterval){int n = intervals.length;int i =0, j = n-1;// i means the intervals that are smaller than the newIntervalwhile(i < n && intervals[i][1]< newInterval[0]) i++;// j means the intervals that are larger than the newIntervalwhile(j >=0&& intervals[j][0]> newInterval[1]) j--;int[][] res =newint[n+i-j][2];if(i == n){for(int k =0; k < n; k++){
res[k]= intervals[k];}
res[n]= newInterval;}elseif(j ==-1){
res[0]= newInterval;for(int k =1; k < n+1; k++){
res[k]= intervals[k-1];}}else{for(int k =0; k <= i-1; k++){
res[k]= intervals[k];}// insert the new interval
res[i]=newint[]{Math.min(intervals[i][0], newInterval[0]),Math.max(intervals[j][1], newInterval[1])};for(int k = i+1; k < n+i-j; k++){
res[k]= intervals[k+j-i];}// for (int k = n+i-j-1; k >= i+1; k--)// res[k] = intervals[j+k];}return res;}