Array.sort()方法的一种用法(菜鸟第一次见),Array.sory(intervals,xxxx),后面的xxxx主要是看正负。
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
也有这么写的:
Array.sort(intervals,(o1,o2) -> o1[0]-o2[0]);
**
题目:
**
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
class Solution {
public int [][] merge (int [][] intervals) {
if (intervals.length == 0) {
return new int [0][2];
}//首先排除intervals为空的情况,直接返回一个新的空的二维数组。
Arrays.sort(intervals, new Comparator<int[]>(){
@Override
public int compare(int[] nums1,int[] nums2)
{
return nums1[0]-nums2[0];
}
});
//1.根据区间开始位置的大小,将intervals排序
//可以使用lambda表达式。
//Arrays.sort(intervals,(nums1,nums2)->nums1[0]-nums2[0]);
//2.接下来创建一个新的二维数组,用于保存合并后的区间
int index = -1;
int[][] res = new int[intervals.length][2];//注意这里的二维数组比最后合并的大,因为行数是[intevals.length],所以到后面要减小。
//3.遍历intevals数组里面的数组,
for(int[] interval:intervals) {
if(index==-1 || res[index][1]<interval[0]){
res[++index]=interval;
} else {
res[index][1]=Math.max(res[index][1],interval[1]);
}
//4.正如前面2.中说到的,最后的结果比一开始定义的二维数组要小,所以要取index+1个,否则其他的都是[0,0]
}
return Arrays.copyOf(res,index+1);
}
}