
java
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals == null || intervals.length == 0){
return new int[0][2];
}
//先按照左边界进行排序
Arrays.sort(intervals, (a,b) -> Integer.compare(a[0],b[0]));
//不知道最终有几个,使用动态扩容
List<int[]> merged = new ArrayList<>();
int[] currentInterval = intervals[0];
merged.add(currentInterval);
for(int[] nextInterval : intervals){
//第一轮循环会重复测试一下第一个数组
int currentEnd = currentInterval[1];
int nextStart = nextInterval[0];
int nextEnd = nextInterval[1];
//判断是否重叠
if(nextStart <= currentEnd){
currentInterval[1] = Math.max(currentEnd,nextEnd);
}else{
currentInterval = nextInterval;
merged.add(currentInterval);
}
}
return merged.toArray(new int[merged.size()][]);
}
}
动态扩容:
ArrayList先申请一个默认为0的原生数组elementData,存元素时申请一个默认容量为10的新数组,新数组满的时候,申请新数组长度为原来的1.5倍,将原来数组的东西通过System.arraycopy方法复制到新数组中,将旧数组交给垃圾回收器(GC)。
引用传递:
多个变量名共同管理内存里的同一个对象实体,最终看到的结果也同步改变。