题意:
解法:
class Solution {
public int[][] merge(int[][] intervals) {//n行 2列
//尾元素 大于下一组的首元素 就要合并
//先进行数组 排序 即 [1,3] [2,6]
if(intervals.length==1) return intervals;
int[][] res=new int[intervals.length][];
ArrayList list=new ArrayList<>();
//按首元素 进行排序
intervals=sortmaopao(intervals);
int big=0;
int start1=0;
int start2=0;
int end1=0;
int end2=0;
int count=0;
for(int k=0;k=start2){
//缩小处理
if(end1>end2){
//直接加入 k所在数组
intervals[big]=intervals[k];//更新 big值
//list.add(intervals[k]);
}else{
//取k的首 取big的尾
intervals[big][0]=start1;//更新big值
//list.add(intervals[big]);
}
//如何更新呢
}else{
//list.add(intervals[k]);
//res[count++]=intervals[k];
list.add(new int[] {intervals[k][0],intervals[k][1]});
}
}
// return res;
return list.toArray(new int[list.size()][2]);
}
//先将数组进行排序
public int[][] sortmaopao(int[][] intervals){
if(intervals.length==1) return intervals;
//利用冒泡排序
int[] tem=null;
for(int i=0;iintervals[j][0]){
tem=intervals[i];
intervals[i]=intervals[j];
intervals[j]=tem;
}
}
}
return intervals;
}
}
思路: 原数组 是一个n行 2列的数组
先按照每行的首 num 进行排序
然后分情况比较
知识点:
如何返回一个保存不定长度的数组呢?
如果使用int[] num=new int[x]; 那么数组长度一开始就固定死了,当然你也可以通过Array去操作 但略显麻烦
推荐方法:
第一步:
集合返回数组 即 list.toArray()
ArrayListlist=new ArrayList<>();
第二步:
本题是要返回一个二维数组 ,而 集合返回的是一个一维数组,
那么我们在添加元素的时候 在一维数组里 加入一维数组即可
list.add(new int[] {intervals[k][0],intervals[k][1]});
第三步:
list.Array() 是集合转换为数组的方法
list.toArray(new int[list.size()][2]) 是定义一个多大的数组
list.toArray(new int[list.size()][2])
# 排序
排序算法累计ing



