mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Merge pull request #1621 from zhicheng-lee/zhicheng-lee-patch-5
更新 0452.用最少数量的箭引爆气球.md Java代码
This commit is contained in:
@ -137,29 +137,21 @@ public:
|
|||||||
### Java
|
### Java
|
||||||
```java
|
```java
|
||||||
/**
|
/**
|
||||||
时间复杂度 : O(NlogN) 排序需要 O(NlogN) 的复杂度
|
* 时间复杂度 : O(NlogN) 排序需要 O(NlogN) 的复杂度
|
||||||
|
* 空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间
|
||||||
空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间
|
|
||||||
*/
|
*/
|
||||||
class Solution {
|
class Solution {
|
||||||
public int findMinArrowShots(int[][] points) {
|
public int findMinArrowShots(int[][] points) {
|
||||||
if (points.length == 0) return 0;
|
// 根据气球直径的开始坐标从小到大排序
|
||||||
//用x[0] - y[0] 会大于2147483647 造成整型溢出
|
// 使用Integer内置比较方法,不会溢出
|
||||||
Arrays.sort(points, (x, y) -> Integer.compare(x[0], y[0]));
|
Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
|
||||||
//count = 1 因为最少需要一个箭来射击第一个气球
|
|
||||||
int count = 1;
|
int count = 1; // points 不为空至少需要一支箭
|
||||||
//重叠气球的最小右边界
|
|
||||||
int leftmostRightBound = points[0][1];
|
|
||||||
for (int i = 1; i < points.length; i++) {
|
for (int i = 1; i < points.length; i++) {
|
||||||
//如果下一个气球的左边界大于最小右边界
|
if (points[i][0] > points[i - 1][1]) { // 气球i和气球i-1不挨着,注意这里不是>=
|
||||||
for(int i = 1; i < points.length; i++){
|
count++; // 需要一支箭
|
||||||
if (points[i][0] > leftmostRightBound ) {
|
} else { // 气球i和气球i-1挨着
|
||||||
//增加一次射击
|
points[i][1] = Math.min(points[i][1], points[i - 1][1]); // 更新重叠气球最小右边界
|
||||||
count++;
|
|
||||||
leftmostRightBound = points[i][1];
|
|
||||||
//不然就更新最小右边界
|
|
||||||
} else {
|
|
||||||
leftmostRightBound = Math.min(leftmostRightBound , points[i][1]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
|
Reference in New Issue
Block a user