题目描述
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
解体思路
一、先排序,后交集
1、先将数值按照左侧数值进行升序排列,相同的按照第二个数的升序排列,使用Arrays.sort(),重写下comprator即可
2、从做开始,进行合并,因为已经进行了左边数值的排序,而对单个数组而言,左边的数值一定是小于或者等于右边的数值的,所以只要比较右边数值和下一个数组的左边数值的大小,即可判断是否有交集
3、对有交集的数值,取两个数组的左边值的最小值和右边值的最大值
4、将组合后的数组返回
二、双循环对比取交集
1、第一个数组,按从左到右,和后面的数组对比
2、如果存在交集,则合并
3、将合并后的数值放到后面数组的位置,然后将前面数组置为null,同时结束本轮循环,进入下一次循环
4、循环遍历完后,将非null的数组取出回传
涉及的方法
Arrays.sort(intervals, new Comparator<int[]>(){
public int compare(int[] o1, int[]o2){
if(o1[0] == o2[0]){
return o1[1] - o2[1];
}
return o1[0] - o2[0];
}
})
vscode代码链接
https://github.com/lunaDolphin/leetcode/tree/master/queueMerge56
https://github.com/lunaDolphin/leetcode/tree/master/queueMerge56_1
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。