Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 2e02d14

Browse files
solves #452: Minimum Number of Arrows to Burst Balloons in java
1 parent 8ed59b7 commit 2e02d14

File tree

3 files changed

+92
-20
lines changed

3 files changed

+92
-20
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@
315315
| 443 | [String Compression](https://leetcode.com/problems/string-compression) | [![Java](assets/java.png)](src/StringCompression.java) [![Python](assets/python.png)](python/string_compression.py) | |
316316
| 447 | [Number of Boomerangs](https://leetcode.com/problems/number-of-boomerangs) | [![Java](assets/java.png)](src/NumberOfBoomerangs.java) [![Python](assets/python.png)](python/number_of_boomerangs.py) | |
317317
| 448 | [Find All Numbers Disappeared in an Array](https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array) | [![Java](assets/java.png)](src/FindAllNumbersDisappearedInAnArray.java) [![Python](assets/python.png)](python/find_all_numbers_disappeared_in_an_array.py) | |
318+
| 452 | [Minimum Number of Arrows to Burst Balloons](https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons) | [![Java](assets/java.png)](src/MinimumNumberOfArrowsToBurstBalloons.java) | |
318319
| 453 | [Minimum Moves to Equal Array Elements](https://leetcode.com/problems/minimum-moves-to-equal-array-elements) | [![Java](assets/java.png)](src/MinimumMovesToEqualArrayElements.java) [![Python](assets/python.png)](python/minimum_moves_to_equal_array_element.py) | |
319320
| 455 | [Assign Cookies](https://leetcode.com/problems/assign-cookies) | [![Java](assets/java.png)](src/AssignCookies.java) [![Python](assets/python.png)](python/assign_cookies.py) | |
320321
| 459 | [Repeated Substring Pattern](https://leetcode.com/problems/repeated-substring-pattern) | [![Java](assets/java.png)](src/RepeatedSubstringPattern.java) [![Python](assets/python.png)](python/repeated_substring_pattern.py) | |

src/HelloWorld.java

Lines changed: 65 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,80 @@
11
import java.util.ArrayList;
22
import java.util.Arrays;
3-
import java.util.Collections;
4-
import java.util.HashSet;
53
import java.util.List;
6-
import java.util.Set;
74

85
public class HelloWorld {
9-
public int lengthOfLongestSubstring(String s) {
10-
if (s.isEmpty()) {
11-
return 0;
6+
public static int[][] insert(int[][] intervals, int[] newInterval) {
7+
if (intervals.length == 0) {
8+
return new int[][] { newInterval };
129
}
1310

14-
int maxLength = 1;
15-
final Set<Character> slidingWindow = new HashSet<>() {{
16-
add(s.charAt(0));
17-
}};
11+
final int startIndex = binarySearch(intervals, newInterval[0]);
1812

19-
for (int left = 0, right = 1, currentLength = 1 ; right < s.length() ; ) {
20-
if (slidingWindow.contains(s.charAt(right))) {
21-
slidingWindow.remove(s.charAt(left));
22-
left++;
23-
currentLength--;
13+
final List<int[]> result = new ArrayList<>();
14+
for (int i = 0 ; i < startIndex ; i++) {
15+
result.add(intervals[i]);
16+
}
17+
result.add(newInterval);
18+
for (int i = startIndex ; i < intervals.length ; i++) {
19+
result.add(intervals[i]);
20+
}
21+
22+
return mergeIntervals(result);
23+
}
24+
25+
private static int[][] mergeIntervals(List<int[]> intervals) {
26+
final List<int[]> result = new ArrayList<>();
27+
int start = intervals.getFirst()[0], end = intervals.getFirst()[1];
28+
for (int[] interval : intervals) {
29+
if (interval[0] <= end) {
30+
end = Math.max(interval[1], end);
2431
} else {
25-
slidingWindow.add(s.charAt(right));
26-
currentLength++;
27-
maxLength = Math.max(maxLength, currentLength);
28-
right++;
32+
result.add(new int[]{start, end});
33+
start = interval[0];
34+
end = interval[1];
2935
}
3036
}
37+
result.add(new int[] { start, end });
38+
return toArray(result);
39+
}
40+
41+
private static int binarySearch(int[][] intervals, int x) {
42+
int left = 0, right = intervals.length - 1, middle;
43+
while (left <= right) {
44+
middle = left + (right - left) / 2;
45+
if (intervals[middle][0] == x) return middle;
46+
else if (intervals[middle][0] < x) left = middle + 1;
47+
else right = middle - 1;
48+
}
49+
return left;
50+
}
51+
52+
private static int[][] toArray(List<int[]> intervals) {
53+
final int[][] result = new int[intervals.size()][2];
54+
int k = 0;
55+
for (int[] interval : intervals) {
56+
result[k++] = interval;
57+
}
58+
return result;
59+
}
60+
61+
public static void main(String[] args) {
62+
// System.out.println(Arrays.deepToString(
63+
// insert(new int[][]{{1, 3}, {6, 9}}, new int[] {2, 5})
64+
// ));
3165

66+
// System.out.println(Arrays.deepToString(
67+
// insert(
68+
// new int[][] {{1, 2}, {3, 5}, {6, 7}, {8, 10}, {12, 16}},
69+
// new int[] {4, 8}
70+
// )
71+
// ));
3272

33-
return maxLength;
73+
System.out.println(Arrays.deepToString(
74+
insert(
75+
new int[][] {{1, 3}, {6, 9}},
76+
new int[] {2, 5}
77+
)
78+
));
3479
}
3580
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons
2+
// T: O(NlogN)
3+
// S: O(logN)
4+
5+
import java.util.Arrays;
6+
import java.util.Comparator;
7+
8+
public class MinimumNumberOfArrowsToBurstBalloons {
9+
public int findMinArrowShots(int[][] points) {
10+
if (points.length == 0) {
11+
return 0;
12+
}
13+
14+
Arrays.sort(points, Comparator.comparingInt(o -> o[1]));
15+
16+
int arrows = 1, endPoint = points[0][1];
17+
for (int[] p: points) {
18+
if (endPoint < p[0]) {
19+
arrows++;
20+
endPoint = p[1];
21+
}
22+
}
23+
24+
return arrows;
25+
}
26+
}

0 commit comments

Comments
 (0)