1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
List<int[]> mergedIntervals = new ArrayList<>();
mergedIntervals.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
int currentIntervalEnd = intervals[i][1];
int currentIntervalStart = intervals[i][0];
int[] lastMergedInterval = mergedIntervals.get(mergedIntervals.size() - 1);
if (currentIntervalStart <= lastMergedInterval[1]) {
lastMergedInterval[1] = Math.max(lastMergedInterval[1], currentIntervalEnd);
} else {
mergedIntervals.add(intervals[i]);
}
}
return mergedIntervals.toArray(new int[mergedIntervals.size()][]);
}
}

也是很经典的题.

需要注意的是Collection可以直接转array.

时间复杂度: O(nlogn) sort需要花时间. 然后再遍历一遍intervals.
空间复杂度: O(N) 如果是个skewed tree的话, 否则就是logn.