侧边栏壁纸
博主头像
阿里灰太狼博主等级

You have to believe in yourself . That's the secret of success.

  • 累计撰写 104 篇文章
  • 累计创建 50 个标签
  • 累计收到 12 条评论

目 录CONTENT

文章目录

leetcode-56. 合并区间

阿里灰太狼
2022-05-04 / 0 评论 / 0 点赞 / 560 阅读 / 1,185 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

56. 合并区间

JAVA解法

class Solution {
    public int[][] merge(int[][] intervals) {
        // 定义结果集
        List<int[]> res = new ArrayList<>();
        // 若传进来的 intervals 为空,则直接返回,记得 toArray 成题目最终返回要求
        if (intervals.length == 0 || intervals == null){
            return res.toArray(new int[0][]);
        }
        // 这是函数式编程,实现的是 Comparator 接口,对起点进行从小到大排序
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
        // 定义一个循环维护的变量
        int i = 0;
        // 当 i 的值小于 intervals 中的集合个数时,进入循环
        while (i < intervals.length) {
            // 每次遍历都取出区间的左右端点
            int left = intervals[i][0];
            int right = intervals[i][1];
            // 若当前区间的右端点比下一个区间的左端点还大,则说明区间有重叠
            while (i < intervals.length - 1 && intervals[i + 1][0] <= right) {
                // 将当前右端点的值与下一个区间右端点的值进行比较,取较大的值作为新区间右端点
                right = Math.max(right, intervals[++i][1]);
            }
            // 将新区间放入结果集中
            res.add(new int[]{left, right});
            // 接着判断下一个区间
            i++;
        }
        // 返回最终结果集,将 List<int[]> 类型转换成 0 行 n 列的格式的数组类型 ,即一维数组转二维数组
        return res.toArray(new int[0][]);
    }
}

题解分析

  合并区间就是将有重叠区间的两个区间合成一个。首选定义一个存放 int 类型数组的集合作为临时结果集,对传进来的二维数组进行判空,若传进来的 intervals 为空,则直接返回,由于结果集是临时的结果集,记得将一维数组的集合 toArray 成题目最终返回要求的二维数组。利用函数式编程,实现 Comparator 接口,对起点进行从小到大排序,跟 foreach 类似。
  定义一个循环维护的变量,当 i 的值小于 intervals 中的集合个数时,进入循环,确保能遍历到最后一个区间,每次遍历都取出区间的左右端点,若当前区间的右端点比下一个区间的左端点还大,则说明区间有重叠,将当前右端点的值与下一个区间右端点的值进行比较,取较大的值作为新区间右端点,将新区间放入结果集中并接着判断下一个区间,最后返回最终结果集,将 List<int[]> 类型转换成 0 行 n 列的格式的数组类型返回即可。

leetcode原题:56. 合并区间

0

评论区