以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
是什么?
排序
怎么做?
先从小到大排序,然后再判断是否有重复区间
七七的思考?
七七看到这题目的第一眼就想到ArrayList.sort,然后再排序,同时要处理特殊情况,但是这道题明显不够,这里是区间,ArrayList呢?是数组List也不行,是链表,会报错,这里需要引入lambda去排序
import java.util.*;
class Solution {
public int[][] merge(int[][] intervals) {
// 排除特殊情况
if (intervals == null || intervals.length == 0) {
return new int[0][];
}
// 按照起始点排序
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
//定义数组
List<int[]> merged = new ArrayList<>();
// 如果merged为空或者merged最后一个元素的结束点小于当前元素的开始点,则将当前元素加入merged中
for (int[] interval : intervals) {
if (merged.isEmpty() || merged.get(merged.size() - 1)[1] < interval[0]) {
merged.add(interval);
// 如果merged最后一个元素的结束点大于当前元素的开始点,则将merged最后一个元素的结束点更新为当前元素的结束点
} else {
merged.get(merged.size() - 1)[1] = Math.max(
merged.get(merged.size() - 1)[1],
interval[1]
);
}
}
return merged.toArray(new int[merged.size()][]);
}
}
