@@ -136,24 +136,38 @@ public:
136
136
137
137
### Java
138
138
``` java
139
+
140
+ /**
141
+ 时间复杂度 : O(NlogN) 排序需要O(NlogN)
142
+ 空间复杂度 : O(logN) java 的内置排序是快速排序 需要 O(logN)空间
143
+
144
+ */
139
145
class Solution {
140
146
public int [][] merge (int [][] intervals ) {
141
147
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 是最小左边界
144
151
int start = intervals[0 ][0 ];
152
+ int rightmostRightBound = intervals[0 ][1 ];
145
153
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});
148
158
start = intervals[i][0 ];
159
+ rightmostRightBound = intervals[i][1 ];
149
160
} else {
150
- intervals[i][1 ] = Math . max(intervals[i][1 ], intervals[i - 1 ][1 ]);
161
+ // 更新最大右边界
162
+ rightmostRightBound = Math . max(rightmostRightBound, intervals[i][1 ]);
151
163
}
152
164
}
153
- res. add(new int []{start, intervals[intervals . length - 1 ][ 1 ] });
165
+ res. add(new int []{start, rightmostRightBound });
154
166
return res. toArray(new int [res. size()][]);
155
167
}
156
168
}
169
+
170
+ }
157
171
```
158
172
``` java
159
173
// 版本2
0 commit comments