合并区间_leetcode56

题目描述

给出一个区间的集合,请合并所有重叠的区间。

示例 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(){
            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

你可能感兴趣的:(算法,java,排序)