LeetCode算法学习之合并区间

代码完整展示如下:

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        if (intervals.length <= 1) {
            return intervals;
        }

        // 按区间起始位置排序
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
        
        List<int[]> result = new ArrayList<>();
        int[] currentInterval = intervals[0];
        result.add(currentInterval);
        
        for (int[] interval : intervals) {
            int currentEnd = currentInterval[1];
            int nextStart = interval[0];
            int nextEnd = interval[1];
            
            if (currentEnd >= nextStart) {
                // 有重叠,合并区间
                currentInterval[1] = Math.max(currentEnd, nextEnd);
            } else {
                // 无重叠,添加新区间
                currentInterval = interval;
                result.add(currentInterval);
            }
        }
        
        return result.toArray(new int[result.size()][]);
    }
}

首先对输入数组进行一个长度判定,若数组只有一个元素或者一个元素都没有,则直接返回输入数组即可,然后需要对二维数组中的一维数组进行排序,因为题目给定的二维数组内部没有说明是有序的,为了后边的操作正常,需要提前对数组进行排序,这里排序使用的是Arrays工具类中的sort方法,并且添加了一个自定义比较规则,(a, b) -> Integer.compare(a[0], b[0]),a,b代表的是二维数组中的两个一维数组,我们需要根据一维数组的首元素进行比较,所以后边是a[0], b[0],进行比较,然后创建一个list集合来存储结果集,根据list特性可以获取长度,为后边返回二维数组的长度提供依据,将原数组的首元素先存入list集合中,后续如果有重叠部分就修改这个元素的值,在for循环中处理真正的合并逻辑,先定义三个变量,currentEnd:表示当前处理区间的尾元素,nextStart:表示下一个区间的首元素,nextEnd:表示下一个区间的尾元素,如果currentEnd >= nextStart说明有重叠,此时要修改当前区间的尾元素为Math.max(currentEnd, nextEnd),即currentEnd, nextEnd两者中的最大值,如果没有重叠,就把当前遍历到的区间更新为currentInterval正在处理区间,并添加到结果集中,最后返回result.toArray(new int[result.size()][]);

相关推荐
m0_748233643 小时前
单调栈详解【C/C++】
c语言·c++·算法·1024程序员节
青衫码上行4 小时前
【Java Web学习 | 第1篇】前端 - HTML
java·前端·学习
charlie1145141914 小时前
HTML 理论笔记
开发语言·前端·笔记·学习·html·1024程序员节
郝学胜-神的一滴4 小时前
Linux中的`fork`函数详解:深入解析
linux·服务器·开发语言·c++·算法
知识分享小能手4 小时前
uni-app 入门学习教程,从入门到精通,uni-app 企业项目实战:鲁嗑瓜子项目开发知识点(9)
前端·javascript·学习·微信小程序·小程序·uni-app·vue
知识分享小能手4 小时前
uni-app 入门学习教程,从入门到精通,uni-app中uCharts组件学习((8)
vue.js·学习·ui·微信小程序·小程序·uni-app·echarts
大数据张老师4 小时前
数据结构——BF算法
数据结构·算法·1024程序员节
让我们一起加油好吗5 小时前
【数论】欧拉定理 && 扩展欧拉定理
c++·算法·数论·1024程序员节·欧拉定理·欧拉降幂·扩展欧拉定理
Yupureki5 小时前
从零开始的C++学习生活 14:map/set的使用和封装
c语言·数据结构·c++·学习·visual studio·1024程序员节