1.合并区间

对于这种区间问题,我们应该先排序根据排序的结果总结一些规律,进而的得出解决该问题的策略。

class Solution {
public static int[][] merge(int[][] intervals) {
//第一步进行左端点排序
Arrays.sort(intervals,(v1,v2)->{
return v1[0] -v2[0];
});
//进行合并
int left = intervals[0][0],right = intervals[0][1];
List<int[]> ret = new ArrayList<>();
for(int i = 1;i < intervals.length;i++){
int a = intervals[i][0],b = intervals[i][1];
if(a <= right){
//left始终是最小的 right要更新为最大的才行
right = Math.max(right,b);
}else{
//把前面的数字合并成一个新的数组 之后更新left right再次进行比较
ret.add(new int[]{left,right});
left = a;
right = b;
}
}
//如果最后一个数组的 a > right 更新 left 和 right 之后就无法再进入循环
// 如果最后一组要合并的数字 a并没有大于right同样无法进入else合并数组
// 所以最后要加入left right
ret.add(new int[]{left,right});
//把ret里面存的数组全部列出来
return ret.toArray(new int[0][]);
}
}