【合并区间】

简介: 【合并区间】

正文


一、题目描述#


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

示例 1:


输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].


示例 2:


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


二、代码#


class Solution {
        public int[][] merge(int[][] intervals) {
        List<int[]> list = new ArrayList<>();
        //循环循环遍历我的
        if (null == intervals || intervals.length < 1) {
            return new int[0][];
        } else {
            qSort(intervals, 0, intervals.length - 1);
            int[] temp = intervals[0];
            for (int i = 1; i < intervals.length; i++) {
                if (intervals[i][0] <= temp[1]) {
                    temp[1] = intervals[i][1] > temp[1] ? intervals[i][1] : temp[1];
                } else {
                    list.add(temp);
                    temp = intervals[i];
                }
            }
            if (list.size() > 0) {
                if (list.get(list.size() - 1)[1] < temp[0]) {
                    list.add(temp);
                }else {
                    int[] ints = list.get(list.size() - 1);
                    list.remove(list.size() - 1);
                    ints[1]=ints[1] > temp[1] ? ints[1] : temp[1];
                    list.add(ints);
                }
            } else {
                list.add(temp);
            }
            int[][] returnArr = new int[list.size()][];
            for (int i = 0; i < returnArr.length; i++) {
                returnArr[i] = list.get(i);
            }
            return returnArr;
        }
    }
    private void qSort(int[][] arr, int l, int r) {
        int partition = getPartition(arr, l, r);
        if (-1 != partition) {
            qSort(arr, l, partition - 1);
            qSort(arr, partition + 1, r);
        }
    }
    private int getPartition(int[][] arr, int l, int r) {
        if (r - l < 1) {
            return -1;
        } else {
            int[] temp = arr[l];
            while (l < r) {
                while (l < r && arr[r][0] >= temp[0]) r--;
                arr[l] = arr[r];
                while (l < r && arr[l][0] <= temp[0]) l++;
                arr[r] = arr[l];
            }
            arr[r] = temp;
            return r;
        }
    }
}


三、解题思路#


首先用快速排序给我们的数组排序。之后,再进行合并我们的候选数组。

相关文章
|
7月前
|
C++ Python
leetcode-56:合并区间
leetcode-56:合并区间
62 0
|
7月前
|
算法 测试技术 C#
C++二分查找算法:包含每个查询的最小区间
C++二分查找算法:包含每个查询的最小区间
|
2月前
acwing 836 合并区间
acwing 836 合并区间
14 1
acwing 836 合并区间
|
2月前
|
C++
Leetcode第56题(合并区间)
这篇文章介绍了LeetCode第56题“合并区间”的解题方法,通过排序和贪心策略合并重叠区间,并提供了C++的代码实现。
28 0
Leetcode第56题(合并区间)
|
4月前
|
算法
LeetCode第56题合并区间
LeetCode第56题"合并区间"的解题方法,通过排序区间并判断重叠后进行合并,有效解决了区间合并问题。
LeetCode第56题合并区间
|
7月前
力扣56.合并区间
力扣56.合并区间
|
7月前
|
算法 程序员 测试技术
【算法训练-数组 四】【数组合并】:合并两个有序数组
【算法训练-数组 四】【数组合并】:合并两个有序数组
56 0
|
算法 安全 Swift
LeetCode - #56 合并区间(Top 100)
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。