mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 02:53:31 +08:00
@ -136,24 +136,38 @@ public:
|
|||||||
|
|
||||||
### Java
|
### Java
|
||||||
```java
|
```java
|
||||||
|
|
||||||
|
/**
|
||||||
|
时间复杂度 : O(NlogN) 排序需要O(NlogN)
|
||||||
|
空间复杂度 : O(logN) java 的内置排序是快速排序 需要 O(logN)空间
|
||||||
|
|
||||||
|
*/
|
||||||
class Solution {
|
class Solution {
|
||||||
public int[][] merge(int[][] intervals) {
|
public int[][] merge(int[][] intervals) {
|
||||||
List<int[]> res = new LinkedList<>();
|
List<int[]> res = new LinkedList<>();
|
||||||
Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
|
//按照左边界排序
|
||||||
|
Arrays.sort(intervals, (x, y) -> Integer.compare(x[0], y[0]));
|
||||||
|
//initial start 是最小左边界
|
||||||
int start = intervals[0][0];
|
int start = intervals[0][0];
|
||||||
|
int rightmostRightBound = intervals[0][1];
|
||||||
for (int i = 1; i < intervals.length; i++) {
|
for (int i = 1; i < intervals.length; i++) {
|
||||||
if (intervals[i][0] > intervals[i - 1][1]) {
|
//如果左边界大于最大右边界
|
||||||
res.add(new int[]{start, intervals[i - 1][1]});
|
if (intervals[i][0] > rightmostRightBound) {
|
||||||
|
//加入区间 并且更新start
|
||||||
|
res.add(new int[]{start, rightmostRightBound});
|
||||||
start = intervals[i][0];
|
start = intervals[i][0];
|
||||||
|
rightmostRightBound = intervals[i][1];
|
||||||
} else {
|
} else {
|
||||||
intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]);
|
//更新最大右边界
|
||||||
|
rightmostRightBound = Math.max(rightmostRightBound, intervals[i][1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res.add(new int[]{start, intervals[intervals.length - 1][1]});
|
res.add(new int[]{start, rightmostRightBound});
|
||||||
return res.toArray(new int[res.size()][]);
|
return res.toArray(new int[res.size()][]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
```
|
```
|
||||||
```java
|
```java
|
||||||
// 版本2
|
// 版本2
|
||||||
|
Reference in New Issue
Block a user