LeetCode:合并区间

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals == null || intervals.length == 0){
            return new int[0][2];
        }

        //先按照左边界进行排序
        Arrays.sort(intervals, (a,b) -> Integer.compare(a[0],b[0]));
        //不知道最终有几个,使用动态扩容
        List<int[]> merged = new ArrayList<>();

        int[] currentInterval = intervals[0];
        merged.add(currentInterval);

        for(int[] nextInterval : intervals){
            //第一轮循环会重复测试一下第一个数组
            int currentEnd = currentInterval[1];
            int nextStart = nextInterval[0];
            int nextEnd = nextInterval[1];
            //判断是否重叠
            if(nextStart <= currentEnd){
                currentInterval[1] = Math.max(currentEnd,nextEnd);
            }else{
                currentInterval = nextInterval;
                merged.add(currentInterval);
            }
        }
        return merged.toArray(new int[merged.size()][]);
    }
}

动态扩容:

ArrayList先申请一个默认为0的原生数组elementData,存元素时申请一个默认容量为10的新数组,新数组满的时候,申请新数组长度为原来的1.5倍,将原来数组的东西通过System.arraycopy方法复制到新数组中,将旧数组交给垃圾回收器(GC)。

引用传递:

多个变量名共同管理内存里的同一个对象实体,最终看到的结果也同步改变。

相关推荐
豆瓣鸡8 分钟前
算法日记 - Day10
算法
戴西软件19 分钟前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
zander25829 分钟前
4. 寻找两个正序数组的中位数:用分割点代替合并
数据结构·算法
Kisorge40 分钟前
【电机控制器】 基于STSPIN32G4的FOC控制
stm32·嵌入式硬件·算法
Elivs1 小时前
RMSNorm函数
人工智能·算法·机器学习
tudousisi2221 小时前
P4447 [AHOI2018初中组] 分组 题解复盘
算法
SNAKEpc121381 小时前
OpenGL(十一)- 变换管线
c语言·c++·算法·矩阵·图形渲染
饼饼学习空间智能3 小时前
遥操作数据能否提升机器人自主化水平?详解模仿学习、仿真放大与Sim2Real闭环
人工智能·算法
间歇性努力持续性发呆的野生快乐选手4 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先
嵌入式冰箱4 小时前
2026年华数杯B题完整解题思路与建模方案
算法