首先,需要按照区间的左端点升序排列,之后我们发现(1,3)与(2,6)之间有重合的地方。重合的原因是因为后者的左端点大于前者的右端点,那我们我们就可以更新前者的右端点为后者的右端点。同样的,我们发现(1,5)与(2,3)之间有重合的地方。重合的原因是因为后者的左端点大于前者的右端点,但是我们的右端点不用更新,因为前者的右端点比后者的右端点大。
所以我们更新的步骤为:
1.按照区间的左端点升序排列
2.判断是否后者的左端点小于前者的右端点,如果是,则更新前者的右端点为两者之间右端点大的那个值,如果否,则说明没有重合,将区间加入结果。
详细注释代码:
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length == 0){
return new int[0][0];
}
int[][] result = new int[intervals.length][2];
//按照区间的左端点升序排列
Arrays.sort(intervals,(v1, v2) -> v1[0] - v2[0]);
result[0] = intervals[0];
int j = 0;
for(int i = 1; i<intervals.length; i++){
//判断是否后者的左端点小于前者的右端点,如果是,则更新前者的右端点为两者之间右端点大的那个值
if(result[j][1] >= intervals[i][0]){
result[j][1] = Math.max(result[j][1],intervals[i][1]);
}
//如果否,则说明没有重合,将区间加入结果。
else{
j++;
result[j] = intervals[i];
}
}
return Arrays.copyOf(result,j+1);
}
}