【LeetCode】 56. Merge Intervals 合并区间(Medium)(JAVA)

【LeetCode】 56. Merge Intervals 合并区间(Medium)(JAVA)

题目地址: https://leetcode.com/problems/merge-intervals/

题目描述:

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.

题目大意

给出一个区间的集合,请合并所有重叠的区间。

解题方法

对数组进行排序,遍历一遍,合并区间

class Solution {
    public int[][] merge(int[][] intervals) {
        if (intervals.length <= 0 || intervals[0].length <= 1) return new int[][]{};
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                return a[0] == b[0] ? a[1] - b[1] : a[0] - b[0];
            }
        });
        int len = 1;
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] > intervals[len - 1][1]) {
                swap(intervals, len, i);
                len++;
            } else if (intervals[i][1] > intervals[len - 1][1]) {
                intervals[len - 1][1] = intervals[i][1];
            }
        }
        int[][] res = new int[len][2];
        for (int i = 0; i < len; i++) {
            res[i] = intervals[i];
        }
        return res;
    }

    public void swap(int[][] intervals, int i, int j) {
        if (i == j) return;
        int[] temp = intervals[i];
        intervals[i] = intervals[j];
        intervals[j] = temp;
    }
}

执行用时 : 7 ms, 在所有 Java 提交中击败了 86.03% 的用户
内存消耗 : 42.4 MB, 在所有 Java 提交中击败了 47.08% 的用户

发布了81 篇原创文章 · 获赞 6 · 访问量 2288

猜你喜欢

转载自blog.csdn.net/qq_16927853/article/details/104782274