LC.P56[合并区间]

方法一:排序+一次遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> ans = new ArrayList<>();
ans.add(intervals[0]);
for (int i = 1; i < intervals.length; ++i) {
int start = intervals[i][0], end = intervals[i][1];
if (ans.get(ans.size() - 1)[1] < start) {
ans.add(intervals[i]);
} else {
ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], end);
}
}
return ans.toArray(new int[ans.size()][]);
}
}
  • 时间复杂度:$O(nlogn)$
  • 空间复杂度;$O(logn)$