暂时的领悟,排序最喜欢用的三种方法,暴力破解,双指针法,排序。这是一道关于二维数组的排序题。 关于 二维数组的排序
int [][]intervals = {{1,2},{0,1},{3,4},{5,6},{2,3},{0,8}};
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0]; //o1[0] - o2[0]大于0就交换顺序,说明o1>02;
}
});
o1[0]-o2[0] 是升序
02[0]-o[1]是降序。
同时也可以改写成 java8的lambda表达式
Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);// o1[0] - o2[0]大于0就交换顺序```
以下为本题代码。
public static int[][] merge(int[][] intervals) {
if (intervals.length==0) return new int[0][2];
//使用lambda表达式对数组的第一个数字进行排序
Arrays.sort(intervals, (o1,o2)-> o1[0] - o2[0]);
//如果实现是不知道数组的长度,可以考虑使用ArrayList进行存储,再使用toArray(new int[mergeArray.size()][])进行转换
ArrayList<int[]> mergeArray = new ArrayList<>();
for (int i =0;i<intervals.length;i++){
int min = intervals[i][0];
int max = intervals[i][1];
if (mergeArray.size()==0||mergeArray.get(mergeArray.size()-1)[1]<min)
/*只可以new int[]{max,min},不可以new []int{min.max}*/
mergeArray.add(new int[]{min,max});
else if(mergeArray.get(mergeArray.size()-1)[1]<max){
mergeArray.get(mergeArray.size()-1)[1] = max;
}
}
return mergeArray.toArray(new int[mergeArray.size()][]);
}