package Leetcode; import java.util.Arrays; /** * 给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 */ /** * 思路:1.从左到右找到第一个新区间位置,他可以是与新区间的左边交叉,也可以是最后一个完全在新区间左边的区间 * 2. 找到左边位置后找右边放的位置,遍历找到后面的一个区间,左边大于等于新区间的右边,对于中间的区间,重置新区间,左边是中间节点中最小左,右边是最大右,直到左边完全大于新区间 * 3.新区间插入,右边完全相离插入 */ public class insertQujian { public static void main(String[] args) { int [][]intervals={{1,3},{6,9}}; int []newInterval={2,5}; int [][]result=insert(intervals, newInterval); int x=0; } public static int[][] insert(int[][] intervals, int[] newInterval) { if(intervals==null||intervals.length==0){ int [][]result={newInterval}; return result; } int res[][]=new int[intervals.length+1][2]; int i=0; int idx=0; while(i<intervals.length&&intervals[i][1]<newInterval[0]){ res[idx++]=intervals[i++]; } while(i<intervals.length&&intervals[i][0]<=newInterval[1]){ newInterval[0]=Math.min(intervals[i][0],newInterval[0]); newInterval[1]=Math.max(intervals[i][1],newInterval[1]); i++; } res[idx++]=newInterval; while(i<intervals.length){ res[idx++]=intervals[i++]; } return Arrays.copyOf(res, idx); } }