Skip to content

Commit 73d7e3f

Browse files
Merge pull request youngyangyang04#1621 from zhicheng-lee/zhicheng-lee-patch-5
更新 0452.用最少数量的箭引爆气球.md Java代码
2 parents 1113c71 + 1e65b01 commit 73d7e3f

File tree

1 file changed

+12
-20
lines changed

1 file changed

+12
-20
lines changed

problems/0452.用最少数量的箭引爆气球.md

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -137,29 +137,21 @@ public:
137137
### Java
138138
```java
139139
/**
140-
时间复杂度 : O(NlogN) 排序需要 O(NlogN) 的复杂度
141-
142-
空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间
143-
*/
140+
* 时间复杂度 : O(NlogN) 排序需要 O(NlogN) 的复杂度
141+
* 空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间
142+
*/
144143
class Solution {
145144
public int findMinArrowShots(int[][] points) {
146-
if (points.length == 0) return 0;
147-
//用x[0] - y[0] 会大于2147483647 造成整型溢出
148-
Arrays.sort(points, (x, y) -> Integer.compare(x[0], y[0]));
149-
//count = 1 因为最少需要一个箭来射击第一个气球
150-
int count = 1;
151-
//重叠气球的最小右边界
152-
int leftmostRightBound = points[0][1];
145+
// 根据气球直径的开始坐标从小到大排序
146+
// 使用Integer内置比较方法,不会溢出
147+
Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
148+
149+
int count = 1; // points 不为空至少需要一支箭
153150
for (int i = 1; i < points.length; i++) {
154-
//如果下一个气球的左边界大于最小右边界
155-
for(int i = 1; i < points.length; i++){
156-
if (points[i][0] > leftmostRightBound ) {
157-
//增加一次射击
158-
count++;
159-
leftmostRightBound = points[i][1];
160-
//不然就更新最小右边界
161-
} else {
162-
leftmostRightBound = Math.min(leftmostRightBound , points[i][1]);
151+
if (points[i][0] > points[i - 1][1]) { // 气球i和气球i-1不挨着,注意这里不是>=
152+
count++; // 需要一支箭
153+
} else { // 气球i和气球i-1挨着
154+
points[i][1] = Math.min(points[i][1], points[i - 1][1]); // 更新重叠气球最小右边界
163155
}
164156
}
165157
return count;

0 commit comments

Comments
 (0)