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)。

引用传递:

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

相关推荐
灵感__idea1 小时前
Hello 算法:“走一步看一步”的智慧
前端·javascript·算法
lwf0061643 小时前
导数学习日记
学习·算法·机器学习
头发够用的程序员3 小时前
从滑动窗口到矩阵运算:img2col算法基本原理
人工智能·算法·yolo·性能优化·矩阵·边缘计算·jetson
武帝为此4 小时前
【数据清洗缺失值处理】
python·算法·数学建模
Halo_tjn4 小时前
Java 基于字符串相关知识点
java·开发语言·算法
念越5 小时前
算法每日一题 Day08|双指针法解决三数之和
算法·力扣
黎阳之光5 小时前
黎阳之光透明管理:视频孪生重构智慧仓储新范式
人工智能·算法·安全·重构·数字孪生
6Hzlia5 小时前
【Hot 100 刷题计划】 LeetCode 199. 二叉树的右视图 | C++ DFS 逆序遍历
c++·leetcode·深度优先
CappuccinoRose6 小时前
回溯法 - 软考备战(四十三)
算法·排列组合·路径·n皇后·子集·解数独·岛屿
AC赳赳老秦6 小时前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw