• 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;
    };
    
  • 相关阅读:
    Proximal Gradient Descent for L1 Regularization
    使用Spring Security3的四种方法概述
    理解spring对事务的处理:传播性
    MySQL事务隔离级别详解
    Spring 使用注解方式进行事务管理
    Redis的高级应用-安全性和主从复制
    Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用
    mysql 语句优化心得
    Maven搭建Spring Security3.2项目详解
    Java网络编程之TCP、UDP
  • 原文地址:https://www.cnblogs.com/mapoos/p/13233543.html
Copyright © 2020-2023  润新知