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

引用传递:

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

相关推荐
INGNIGHT2 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_839080542 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山3 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds3 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
Tisfy3 小时前
LeetCode 3498.字符串的反转度:一次遍历
leetcode·字符串·题解·遍历
a187927218313 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx3 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_307779134 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
AI职业加油站4 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
倍利福猎头公司官方账号4 小时前
2026具身智能赛道还火热吗?机器人人选该如何思考下半年的工作机会?
人工智能·面试·职场和发展·机器人·求职招聘