Skip to content

Commit cfa0504

Browse files
authored
Update 0056.合并区间.md
1 parent be18cd3 commit cfa0504

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

problems/0056.合并区间.md

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,24 +136,38 @@ public:
136136

137137
### Java
138138
```java
139+
140+
/**
141+
时间复杂度 : O(NlogN) 排序需要O(NlogN)
142+
空间复杂度 : O(logN) java 的内置排序是快速排序 需要 O(logN)空间
143+
144+
*/
139145
class Solution {
140146
public int[][] merge(int[][] intervals) {
141147
List<int[]> res = new LinkedList<>();
142-
Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
143-
148+
//按照左边界排序
149+
Arrays.sort(intervals, (x, y) -> Integer.compare(x[0], y[0]));
150+
//initial start 是最小左边界
144151
int start = intervals[0][0];
152+
int rightmostRightBound = intervals[0][1];
145153
for (int i = 1; i < intervals.length; i++) {
146-
if (intervals[i][0] > intervals[i - 1][1]) {
147-
res.add(new int[]{start, intervals[i - 1][1]});
154+
//如果左边界大于最大右边界
155+
if (intervals[i][0] > rightmostRightBound) {
156+
//加入区间 并且更新start
157+
res.add(new int[]{start, rightmostRightBound});
148158
start = intervals[i][0];
159+
rightmostRightBound = intervals[i][1];
149160
} else {
150-
intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]);
161+
//更新最大右边界
162+
rightmostRightBound = Math.max(rightmostRightBound, intervals[i][1]);
151163
}
152164
}
153-
res.add(new int[]{start, intervals[intervals.length - 1][1]});
165+
res.add(new int[]{start, rightmostRightBound});
154166
return res.toArray(new int[res.size()][]);
155167
}
156168
}
169+
170+
}
157171
```
158172
```java
159173
// 版本2

0 commit comments

Comments
 (0)