zoukankan      html  css  js  c++  java
  • Leetcode NO.56 Merge Intervals 合并区间

    1.问题描述

    以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

    2.测试用例

    示例 1
    输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
    输出:[[1,6],[8,10],[15,18]]
    
    示例 2
    输入:intervals = [[1,4],[4,5]]
    输出:[[1,5]]
    

    解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

    3.提示

    • 1 <= intervals.length <= 104
    • intervals[i].length == 2
    • 0 <= starti <= endi <= 104

    4.代码

    1.首元素排序合并
    code
    /**
         * 合并区间
         *
         * @param intervals 区间集合
         * @return 合并后区间集合
     */
    public int[][] merge(int[][] intervals) {
        ArrayList<int[]> resList = new ArrayList<>();
        //1.按照首个元素排序
        Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
        //2.判断
        for (int[] interval : intervals) {
            int left = interval[0], right = interval[1];
            int size = resList.size();
            if (size == 0 || resList.get(size - 1)[1] < left) {
                resList.add(interval);
            } else {
                int mergeLeft = resList.get(size - 1)[0];
                int mergeRight = Math.max(resList.get(size - 1)[1], right);
                resList.set(size - 1, new int[]{mergeLeft, mergeRight});
            }
        }
        return resList.toArray(new int[resList.size()][]);
    }
    
    复杂度
    * 时间 O(nlogn)
    * 空间 O(logn)
    
  • 相关阅读:
    伍佰《突然的自我》
    .NET常见ORM框架
    并发和压测工具
    底层源码调试工具
    c 冒泡排序
    c 指定范围的质数
    c 筛法列举质数
    c 牛顿法求方程近似解
    c 二分法求方程近似解
    css选择器 及其权重
  • 原文地址:https://www.cnblogs.com/worldline/p/15721667.html
Copyright © 2011-2022 走看看