2022-03-10 「56. 合并区间」

今天早上又来二刷,思路还是有点偏离,双指针只想存放当前需要存放的数组边界。
但是看了答案后发现,其实准备存放的数组可以直接存在List中,如果列表为空,或者当前区间与上一区间不重合,直接添加,否则就更新区间的边界。

这里可以关注2个按数组首个元素排序的不同写法:

Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
Arrays.sort(intervals, new Comparator() {
            public int compare(int[] interval1, int[] interval2) {
                return interval1[0] - interval2[0];
            }
        });

如果前面申请的是数组List类型的ans,那最后还要把ans转成二维数组格式:

merged.toArray(new int[merged.size()][]);

还有另外一种解法,更贴近我的思路,这里也贴上来参考:

public static int[][] merge(int[][] intervals) {
        if(intervals.length == 0){
            return new int[][]{};
        }
        Arrays.sort(intervals,(a,b)->{return a[0]-b[0];});
        int[][] res = new int[intervals.length][2];
        int index = 0;
        int start =intervals[0][0],end = intervals[0][1];
        //下一个数组的起始值必须要小于上一个数组的最大值才能合并
        for(int i = 1; i 

你可能感兴趣的:(2022-03-10 「56. 合并区间」)