import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param intervals int整型二维数组 * @param new_interval int整型一维数组 * @return int整型二维数组 */ public int[][] insertNewInterval (int[][] intervals, int[] new_interval) { int start = intervals[0][0]; int end = intervals[0][1]; LinkedList<int[]> linkedList = new LinkedList<>(); int index = 0; boolean flag = false; while (index < intervals.length) { if (end < new_interval[0]) { linkedList.add(new int[] {start, end}); index++; if (index >= intervals.length) { break; } start = intervals[index][0]; end = intervals[index][1]; } else { end = Math.max(end, new_interval[1]); start = Math.min(start, new_interval[0]); flag = true; index++; break; } } if (!flag) { linkedList.add(new int[] {new_interval[0], new_interval[1]}); } else { for (int i = index; i < intervals.length; i++) { if (end < intervals[i][0]) { linkedList.add(new int[] {start, end}); start = intervals[i][0]; end = intervals[i][1]; } else { end = Math.max(end, intervals[i][1]); } } linkedList.add(new int[] {start, end}); } int[][] arr = new int[linkedList.size()][]; for (int i = 0; i < linkedList.size(); i++) { arr[i] = linkedList.get(i); } return arr; } }
本题我采用的双指针来解决此题,所用编程语言是java。
我们可以把此题看做数组合并,可以将start初始为第一个数组的第一个元素,end为第一个数组的第二个元素,然后与插入的新数组元素进行比较
如果end小于新数组的第一个元素,start改变为下一个数组的第一个元素,end为下一个数组的第二个元素。
如果end大于等于新数组的第一个元素,end改变为end和新数组第二个元素的最大值,start改变为start和新数组第一个元素的最小,同时数组下标加一,新数组合并的标志设置为true.
新数组合并的标志为true之后,继续开始数组合并.
新数组合并的标志为false,则直接将新数组添加到原数组之后