【数组】【自定义排序】Leetcode 56. 合并区间
---------------🎈🎈56. 合并区间 题目链接🎈🎈-------------------
解法1
进行二维数组按照第一维度升序排序:
Arrays.sort( nums, (o1,o2) -> o1[0]-o2[0] )
如果排序后下一个的首端,大于result中的后端,那么就添加其整体到result的尾部
如果排序后下一个的首端,小于等于result中的后端,那么就可以合并二者,再去判断后端和result后端的大小
–如果下一个的后端,大于result中的后端,那么就更新result中的后端为下一个的后端
–如果下一个的后端,小于等于result中的后端,那么就不改变result
输出指定范围的数组:Arrays.copyOf( result, 长度)
class Solution {
public int[][] merge(int[][] intervals) {
int[][] result = new int[intervals.length][2];
// 先按照区间起始位置排序
Arrays.sort(intervals,(o1,o2) -> o1[0]-o2[0]);
result[0] = new int[]{intervals[0][0],intervals[0][1]};
int j = 0;
for(int i=1; i < intervals.length; i++){
if(intervals[i][0] > result[j][1]){ // 如果下一个的首端,大于result中的后端,那么就添加其到result的尾部
result[++j] = intervals[i];
}
else{ // 如果下一个的首端,小于等于result中的后端,那么就可以合并二者,再去判断后端和result后端的大小
if(intervals[i][1] > result[j][1]){ // 如果下一个的后端,大于result中的后端,那么就更新result中的后端为下一个的后端
result[j][1] = intervals[i][1];
}
else{// 如果下一个的后端,小于等于result中的后端,那么就不改变result
continue;
}
}
}
return Arrays.copyOf(result, j+1);
}
}