zoukankan      html  css  js  c++  java
  • 0056. Merge Intervals (M)

    Merge Intervals (M)

    题目

    Given a collection of intervals, merge all overlapping intervals.

    Example 1:

    Input: [[1,3],[2,6],[8,10],[15,18]]
    Output: [[1,6],[8,10],[15,18]]
    Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
    

    Example 2:

    Input: [[1,4],[4,5]]
    Output: [[1,5]]
    Explanation: Intervals [1,4] and [4,5] are considered overlapping.
    

    NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.


    题意

    将给定数组中所有互相重叠的区间合并为一个大区间。

    思路

    将区间按照左端点值排序后进行处理。


    代码实现

    Java

    class Solution {
        public int[][] merge(int[][] intervals) {
            if (intervals.length == 0) {
                return new int[][]{};
            }
            Arrays.sort(intervals, new Comparator<int[]>() {
                @Override
                public int compare(int[] a, int[] b) {
                    return a[0] - b[0];
                }
            });
            List<int[]> list = new ArrayList<>();
            int left = intervals[0][0], right = intervals[0][1];
            for (int i = 1; i < intervals.length; i++) {
                int[] interval = intervals[i];
                if (left <= interval[1] && right >= interval[0]) {
                    left = Math.min(left, interval[0]);
                    right = Math.max(right, interval[1]);
                } else {
                    list.add(new int[]{left, right});
                    left = interval[0];
                    right = interval[1];
                }
            }
            list.add(new int[]{left, right});
            return list.toArray(new int[list.size()][]);
        }
    }
    

    JavaScript

    var merge = function(intervals) {
        let ans = [];
        if (intervals.length == 0) {
            return ans;
        }
        intervals.sort((a, b) => a[0] - b[0]);
        let left = intervals[0][0], right = intervals[0][1];
        for (let interval of intervals) {
            if (left <= interval[1] && right >= interval[0]) {
                left = Math.min(left, interval[0]);
                right = Math.max(right, interval[1]);
            } else {
                ans.push([left, right]);
                left = interval[0];
                right = interval[1];
            }
        }
        ans.push([left, right]);
        return ans;
    };
    
  • 相关阅读:
    质心坐标(barycentric coordinates)及其应用
    用表存储代替递归算法
    Lua学习之加载其他lua文件
    Mac 端配置 Lua 环境
    聊聊二手房交易遇到的恶心事
    Mac安装Python3后,如何将默认执行的Python2改为Pyhton3
    Mac平台下部署UE4工程到iOS设备的流程
    计算椭圆运动轨迹的算法
    OpenGL中的渲染方式—— GL_TRIANGLE_STRIP
    XDRender_ShaderMode_StandardPBR 间接光照(2)-镜面反射部分(1)
  • 原文地址:https://www.cnblogs.com/mapoos/p/13233543.html
Copyright © 2011-2022 走看看