-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInsertInterval.java
More file actions
64 lines (56 loc) · 1.79 KB
/
InsertInterval.java
File metadata and controls
64 lines (56 loc) · 1.79 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
63
64
package leetcode;
import java.util.LinkedList;
import java.util.List;
/**
* InsertInterval
* https://leetcode-cn.com/problems/insert-interval/
*
* @since 2020-11-04
*/
public class InsertInterval {
public static void main(String[] args) {
InsertInterval sol = new InsertInterval();
int[][] intervals = new int[][]{{1, 2}, {3, 5}, {6, 7}, {8, 10}, {12, 16}};
int[] newInterval = new int[]{4, 8};
int[][] res = sol.insert(intervals, newInterval);
for (int[] row : res) {
System.out.println(row[0] + ", " + row[1]);
}
}
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> resList = new LinkedList<>();
int tmpStart = newInterval[0];
int tmpEnd = newInterval[1];
boolean isDone = false;
for (int[] interval : intervals) {
if (isDone) {
resList.add(interval);
continue;
}
if (interval[1] < tmpStart) {
resList.add(interval);
continue;
}
if (interval[0] > tmpEnd) {
resList.add(new int[]{tmpStart, tmpEnd});
resList.add(interval);
isDone = true;
continue;
}
tmpStart = interval[0] < tmpStart ? interval[0] : tmpStart;
if (interval[1] > tmpEnd) {
tmpEnd = interval[1];
resList.add(new int[]{tmpStart, tmpEnd});
isDone = true;
}
}
if (!isDone) {
resList.add(new int[]{tmpStart, tmpEnd});
}
int[][] resArr = new int[resList.size()][];
for (int i = 0; i < resList.size(); i++) {
resArr[i] = resList.get(i);
}
return resArr;
}
}