1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| package algorithm;
import java.util.ArrayList; import java.util.Arrays; import java.util.List;
public class InsertInterval {
public static int[][] insert(int[][] intervals, int[] newInterval) {
if (intervals == null || intervals.length == 0 || intervals[0].length == 0) { return new int[][]{{newInterval[0], newInterval[1]}}; }
int left = newInterval[0]; int right = newInterval[1]; List<int[]> ans = new ArrayList<>(); int i = 0; for (; i < intervals.length; i++) { if (intervals[i][1] < left) { ans.add(new int[]{intervals[i][0], intervals[i][1]}); if (i == intervals.length - 1) { ans.add(new int[]{left, right}); } } else if (intervals[i][0] > right) { ans.add(new int[]{left, right}); ans.add(new int[]{intervals[i][0], intervals[i][1]}); break; } else if (intervals[i][1] >= right) { ans.add(new int[]{Math.min(left, intervals[i][0]), intervals[i][1]}); break; } else { left = Math.min(left, intervals[i][0]); i++; while (i < intervals.length && right >= intervals[i][0]) { i++; } i--; right = Math.max(right, intervals[i][1]); ans.add(new int[]{left, right}); break; } }
while (++i < intervals.length) { ans.add(new int[]{intervals[i][0], intervals[i][1]}); }
return ans.toArray(new int[ans.size()][]); }
public static void main(String[] args) { int[][] intervals = new int[][]{{1, 3}, {6, 9}}; int[] newInterval = new int[]{2, 5}; System.out.println(Arrays.deepToString(insert(intervals, newInterval)));
intervals = new int[][]{{1, 2}, {3, 5}, {6, 7}, {8, 10}, {12, 16}}; newInterval = new int[]{4, 8}; System.out.println(Arrays.deepToString(insert(intervals, newInterval)));
intervals = new int[][]{{}}; newInterval = new int[]{5, 7}; System.out.println(Arrays.deepToString(insert(intervals, newInterval)));
intervals = new int[][]{{1, 5}}; newInterval = new int[]{2, 3}; System.out.println(Arrays.deepToString(insert(intervals, newInterval)));
intervals = new int[][]{{1, 5}}; newInterval = new int[]{2, 7}; System.out.println(Arrays.deepToString(insert(intervals, newInterval)));
intervals = new int[][]{{1, 5}}; newInterval = new int[]{6, 8}; System.out.println(Arrays.deepToString(insert(intervals, newInterval)));
} }
|