非独立思考!
class Solution {public int[][] merge(int[][] intervals) {// 特值处理if (intervals.length == 0) {return new int[0][2];}// 先按照第一个元素对数组排序// 这个方法学习一下Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0] - o2[0];}});List<int[]> mergedList = new ArrayList<>();// 排完序后,先将第一个加入区间数组的末尾for (int i = 0; i < intervals.length; i++) {// 依次检查下一个区间,该区间的左端点大于末尾的区间的右端点时,直接加入区间数组// 否则证明他们可以合并// !!!将末尾区间的右端点的值改为该区间的右端点的值!!!这种思路不对!!!// 区间的2个值都将使用,一个对比,一个修改int L = intervals[i][0], R = intervals[i][1];if (mergedList.size() == 0|| mergedList.get(mergedList.size() - 1)[1] < L) {// 直接加入mergedListmergedList.add(intervals[i]);} else {// 将其与当前的最后一个区间合并,不是简单直接合并// 因为并非直接将当前区间的右端点赋值过去,取2个区间右端点的最大值mergedList.get(mergedList.size() - 1)[1] =Math.max(mergedList.get(mergedList.size() - 1)[1], R);}}return mergedList.toArray(new int[mergedList.size()][]);}}
