【LeetCode】Day37-合并区间

【LeetCode】Day37-合并区间,第1张

题目

56. 合并区间【中等】

题解

先将区间排序,然后合并重叠区间,思路还是挺清晰的

一些实现不会写,比如二维数组按首元素排序(Arrays.sort),List转int[](.toArray),访问List中元素(.get),返回空数组(return new int[0][])等等

class Solution {
    public int[][] merge(int[][] intervals) {
        int n=intervals.length;
        //二维数组排序
        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];
            }
        });
        //合并区间
        List<int[]>merged=new ArrayList<>();
        merged.add(new int[]{intervals[0][0],intervals[0][1]});
        for(int i=1;i<n;i++){
            int start2=intervals[i][0];
            int end1=merged.get(merged.size()-1)[1],end2=intervals[i][1];
            //有重叠
            if(end1>=start2)
                merged.get(merged.size()-1)[1]=Math.max(end1,end2);//修改上一个merged区间的末尾值
            //无重叠
            else
                merged.add(new int[]{start2,end2});//添加intervals区间
        }
        //List转换为int[][]返回
        return merged.toArray(new int[0][]);
    }
}

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),只需一次遍历时间复杂度O(n),O(nlogn)是排序所需的时间复杂度

空间复杂度: O ( l o g n ) O(logn) O(logn),排序的空间复杂度(存储结果不计入空间复杂度)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存