Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9d65c79

Browse files
solves insert inrterval
1 parent d51ba19 commit 9d65c79

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
| 54 | [Spiral Matrix](https://leetcode.com/problems/spiral-matrix) | [![Java](assets/java.png)](src/SpiralMatrix.java) | |
5656
| 55 | [Jump Game](https://leetcode.com/problems/jump-game) | [![Java](assets/java.png)](src/JumpGame.java) | |
5757
| 56 | [Merge Intervals](https://leetcode.com/problems/merge-intervals) | [![Java](assets/java.png)](src/MergeIntervals.java) | |
58+
| 57 | [Insert Interval](https://leetcode.com/problems/insert-interval) | [![Java](assets/java.png)](src/InsertInterval.java) | |
5859
| 58 | [Length of Last Word](https://leetcode.com/problems/length-of-last-word) | [![Java](assets/java.png)](src/LengthOfLastWord.java) [![Python](assets/python.png)](python/length_of_last_word.py) | |
5960
| 66 | [Plus One](https://leetcode.com/problems/plus-one) | [![Java](assets/java.png)](src/PlusOne.java) [![Python](assets/python.png)](python/plus_one.py) | |
6061
| 67 | [Add Binary](https://leetcode.com/problems/add-binary) | [![Java](assets/java.png)](src/AddBinary.java) [![Python](assets/python.png)](python/add_binary.py) | |

‎src/InsertInterval.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// https://leetcode.com/problems/insert-interval/submissions
2+
// T: O(n)
3+
// S: O(n)
4+
5+
public class InsertInterval {
6+
public int[][] insert(int[][] intervals, int[] newInterval) {
7+
if (intervals.length == 0) return new int[][] {newInterval};
8+
final int startIndex = search(intervals, newInterval[0]);
9+
final int endIndex = search(intervals, newInterval[1]);
10+
final int newStart = startIndex >= intervals.length
11+
? newInterval[0]
12+
: Math.min(intervals[startIndex][0], newInterval[0]);
13+
final int newEnd = endIndex >= intervals.length
14+
? newInterval[1]
15+
: newInterval[1] >= intervals[endIndex][0] ? intervals[endIndex][1] : newInterval[1];
16+
final boolean hasMerged = hasMerged(intervals, newInterval, startIndex, endIndex);
17+
final int intervalMergedEnd = endIndex >= intervals.length
18+
? intervals.length - 1
19+
: newInterval[1] >= intervals[endIndex][0] ? endIndex : endIndex - 1;
20+
final int intervalMergedStart = startIndex;
21+
final int elements = intervals.length - (hasMerged ? intervalMergedEnd - intervalMergedStart : -1);
22+
final int[][] result = new int[elements][2];
23+
int i = 0;
24+
for ( ; i < intervalMergedStart ; i++) result[i] = intervals[i];
25+
result[i++] = new int[] {newStart, newEnd};
26+
if (hasMerged) {
27+
for (i = intervalMergedEnd + 1 ; i < intervals.length ; i++) {
28+
result[i - (intervalMergedEnd - intervalMergedStart)] = intervals[i];
29+
}
30+
} else {
31+
for ( ; i < intervals.length ; i++) {
32+
result[i] = intervals[i - 1];
33+
}
34+
}
35+
return result;
36+
}
37+
38+
private boolean hasMerged(int[][] intervals, int[] interval, int start, int end) {
39+
if (start >= intervals.length) return false;
40+
return interval[0] <= intervals[start][1] ||
41+
(end < intervals.length && interval[1] >= intervals[end][0]);
42+
}
43+
44+
private int search(int[][] array, int x) {
45+
int left = 0, right = array.length - 1, middle;
46+
while (left <= right) {
47+
middle = left + (right - left) / 2;
48+
if (array[middle][1] == x) return middle;
49+
else if (array[middle][1] > x) right = middle - 1;
50+
else left = middle + 1;
51+
}
52+
return left;
53+
}
54+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /