https://leetcode.cn/problems/merge-intervals/
排序再合并
- 先按每个区间的左端点排一下序
- 然后遍历
- 看当前左端点是否大于上一个区间的右端点
- 若是,则把上一个区间生成然后加入结果列表中, 重置左右端点为自己的左右端点
- 若不大于,则看当前右端点是否能把上一个区间的右端点推高,若能,更新一下
- 由于每次生成时机都是生成上一个的,所以在循环轮到最后一个的时候没生成,所以要在外边最后一个
- 看当前左端点是否大于上一个区间的右端点
public int[][] merge(int[][] intervals) {if (intervals == null) return null;List<int[]> merge = new ArrayList<>();Arrays.sort(intervals, (int[] o1, int[] o2) -> {return o1[0] - o2[0];});int L = intervals[0][0];int R = intervals[0][1];for (int i = 1; i < intervals.length; i++) {if (intervals[i][0] > R) {merge.add(new int[]{L, R});L = intervals[i][0];R = intervals[i][1];} else {R = Math.max(R, intervals[i][1]);}}merge.add(new int[]{L, R});return merge.toArray(new int[merge.size()][2]);}
