【普通数组】【中等】合并区间

【普通数组】【中等】合并区间 题目以数组 intervals 表示若干个区间的集合其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间并返回 一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间 。示例 1输入intervals [[1,3],[2,6],[8,10],[15,18]]输出[[1,6],[8,10],[15,18]]解释区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2输入intervals [[1,4],[4,5]]输出[[1,5]]解释区间 [1,4] 和 [4,5] 可被视为重叠区间。示例 3输入intervals [[4,7],[1,4]]输出[[1,7]]解释区间 [1,4] 和 [4,7] 可被视为重叠区间。提示1 intervals.length 10^4intervals[i].length 20 starti endi 10^4排序遍历合并先按照左端点的大小进行排序对于第一个线段区间 [left0,right0] 来说有以下三种情况下一个区间的左端点 left1 在区间右端点 right0 之前右端点在区间右断点 right0 之前第一个区间更大不用合并右端点在区间右断点 right0 之后两个区间合并为 [left0,right1]下一个区间的左端点 left1 在区间右端点 right0 之后无法进行合并直接把之前的合并结果存到新数据然后再继续处理下一个区间publicstaticint[][]merge(int[][]intervals){//先按照左端点进行排序Arrays.sort(intervals,(a,b)-a[0]-b[0]);int[][]resnewint[intervals.length][2];//初始区间int[]tmpintervals[0];System.out.println(Arrays.toString(tmp));intj0;for(inti1;iintervals.length;i){if(intervals[i][0]tmp[1]){//加入到resres[j]tmp;j;tmpintervals[i];}else{tmp[1]Math.max(tmp[1],intervals[i][1]);}}res[j]tmp;//截取j1部分returnArrays.copyOf(res,j1);}Arrays.copyOf 用于将原数组复制成一个指定长度的新数组新数组更长就后面补0新数组更短就截断。copyOf是浅拷贝只复制了对象的引用地址并没有把对象本身克隆一份