56. 合并区间
题解
执行耗时:9 ms,击败了23.07% 的Java用户 内存消耗:41.2 MB,击败了23.64% 的Java用户
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));
// 用于保存合并的结果
List<int[]> merged = new ArrayList<>();
for (int i = 0; i < intervals.length; i++) {
int L = intervals[i][0], R = intervals[i][1];
int size = merged.size();
// 如果merge为空
// 或者如果merge最后一个元素的右边小于当前数组的左边,说明与上一元素不重叠
// 直接将当前数组添加到merged
if (size == 0 || merged.get(size - 1)[1] < L) {
merged.add(new int[] {L, R});
} else {
// 否则说明需要合并
// 合并的方法是更新merged的最后一个元素的右边
// 取当前数组的右边与merged的最后一个元素的右边中的大值
merged.get(size - 1)[1] = Math.max(R, merged.get(size - 1)[1]);
}
}
return merged.toArray(new int[merged.size()][2]);
}
}