57. 插入区间
题目描述:
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
考察重点:题目要求必要时可以合并区间,所以需要遍历所有存在的区间。我们由list保存新的区间序列,isIn记录新区间是否已经插入序列:由前至后遍历,如果新区间与当前区间无交集且新区间大,则只插入当前区间;如果新区间与当前区间无交集且新区间小,说明新区间与原序列无交集
则插入二者;如果有交集,则更新新区间的范围,继续向后查找。
public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> list = new ArrayList<>();boolean isIn = false;for(int[] interval : intervals){if(newInterval[1] < interval[0]){if(!isIn){isIn = true;list.add(newInterval);}list.add(interval);}else if(newInterval[0] > interval[1]){list.add(interval);}else{newInterval[0] = Math.min(interval[0], newInterval[0]);newInterval[1] = Math.max(interval[1], newInterval[1]);}}if(!isIn){list.add(newInterval);}int[][] res = new int[list.size()][2];for(int i = 0;i < res.length;i ++){res[i] = list.get(i);}return res;}