2022.1.10 每日一练 合并区间

本文介绍了一种有效的区间合并算法实现,通过排序和遍历的方式合并重叠区间,避免了资源浪费和冲突。文章提供了完整的Java代码示例,并附带了关键方法的解释链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 如有错误请指出!谢谢

https://dailycode.youkuaiyun.com/practice/2190923

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res = new ArrayList<>();
        if (intervals == null) {
            return res.toArray(new int[0][]);
        }
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);//将二维数组按照第一维元素进行升序排序
        int i = 0;
        int left = 0;//左区间
        int right = 0;//右区间
        while (i < intervals.length) {
            left = intervals[i][0];
            right = intervals[i][1];
            while (i < intervals.length - 1 && right >= intervals[i + 1][0]) {//用当前区间的结尾的值与相邻下一个区间的起始的值比较,当其大于等于下一区间起始的值时,合并区间;最后一个区间没有下一区间所以i<区间总数-1
                i++;
                right = Math.max(right, intervals[i][1]);//比较两区间结尾的值,去大者为合并区间结尾的值
            }
            res.add(new int[] { left, right });//将区间加入ArrayList
            i++;
        }
        return res.toArray(new int[0][]);//将ArrayList转变为数组
    }
}

Arrays.sort() 数组排序,可通过下方链接快速了解此方法

 https://www.cnblogs.com/SupremeBoy/p/12717532.html

toArray()转变格式,可通过下方链接快速了解此方法

https://blog.youkuaiyun.com/weixin_42029901/article/details/103363697

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软糖工程001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值