-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInsertInterval.java
More file actions
62 lines (46 loc) · 1.67 KB
/
Copy pathInsertInterval.java
File metadata and controls
62 lines (46 loc) · 1.67 KB
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
import java.util.*;
class InsertInterval{
public int[][] insert(int[][] intervals, int[] newInterval) {
if ((intervals.length == 0) || (intervals[0].length == 0))
return new int[][]{newInterval};
List<int[]> ints = new ArrayList<>(Arrays.asList(intervals));
ints.add(searchInsertPosition(intervals, newInterval), newInterval);
return mergeIntervals(ints).toArray(new int[][]{{0}});
}
// LC 35 Search Insert Position
private int searchInsertPosition(int[][] intervals, int[] newInterval) {
int target = newInterval[0];
if (target <= intervals[0][0])
return 0;
if (target >= intervals[intervals.length - 1][0])
return intervals.length;
int low = 0;
int high = intervals.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (intervals[mid][0] == target)
return mid;
if (intervals[mid][0] > target)
high = mid - 1;
else
low = mid + 1;
}
return low;
}
// LC 56 Merge Intervals
private List<int[]> mergeIntervals(List<int[]> ints) {
List<int[]> merged = new ArrayList<>();
int[] lastInt = ints.get(0);
merged.add(lastInt);
for (int i = 1; i < ints.size(); i++) {
int[] currInt = ints.get(i);
if (currInt[0] <= lastInt[1]) {
lastInt[1] = Math.max(lastInt[1], currInt[1]);
} else {
merged.add(currInt);
lastInt = currInt;
}
}
return merged;
}
}