当前位置: 首页 > news >正文

leecode56 合并区间

在这里插入图片描述

我的思路

题目分析:

  1. 需要遍历所有的区间数据,我们需要对区间数据进行排序,将这个区间调整为开头元素递增的顺序。
  2. 然后不断遍历这个排序后的数组,不断更新新区间即可。

答题思路:

  1. 先排序
  2. 遍历排序后的每一个数组元素,然后在这个循环中遍历这个数组后续的元素,比较大小
  3. 更新数组

最开始的时候,我是利用这个List获取新的数组,最后将这个list转化为二维数组,但是这种方法涉及到多次的装箱和拆箱工作,且占用额外的空间

public int[][] merge(int[][] intervals) {//对数组进行排序Arrays.sort(intervals, (o1, o2) ->o1[0]-o2[0]);//遍历数组进行调整List<List<Integer>> list = new ArrayList<>();for(int i = 0;i<intervals.length;i++){int start = intervals[i][0];int end = intervals[i][1];int j =0;for( j= i+1;j<intervals.length;j++){if(intervals[j][0]<=end){end = Math.max(intervals[j][1],end);//更新这个结束}else{break;//直接结束即可}}List<Integer> ans = new ArrayList<>();ans.add(start);ans.add(end);list.add(ans);i = j-1;}int[][] res = list.stream().map(l -> l.stream().mapToInt(Integer::intValue).toArray()).toArray(int[][]::new);return res;
}

后续我发现可以不用新建集合,直接在原有数组上进行操作即可。

public int[][] merge(int[][] intervals) {//对数组进行排序Arrays.sort(intervals, (o1, o2) ->o1[0]-o2[0]);//遍历数组进行调整int write =0;for(int i = 0;i<intervals.length;i++){int start = intervals[i][0];int end = intervals[i][1];int j =0;for( j= i+1;j<intervals.length;j++){if(intervals[j][0]<=end){end = Math.max(intervals[j][1],end);//更新这个结束}else{break;//直接结束即可}}intervals[write][0]=start;intervals[write][1]=end;write++;i = j-1;}return Arrays.copyOf(intervals, write);
}

灵神思路

灵神的思路和我大体一致,有几点不同。
他是利用这个List<int[]> ans = new ArrayList<>();来存储结果,并利用ans.toArray(new int[ans.size()][]);转换为二维数组。
他利用的是ans.get(m-1)[1]来获取的这个上一个区间的右端点,我是直接遍历的。

class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals, (p, q) -> p[0] - q[0]); // 按照左端点从小到大排序List<int[]> ans = new ArrayList<>();for (int[] p : intervals) {int m = ans.size();if (m > 0 && p[0] <= ans.get(m - 1)[1]) { // 可以合并ans.get(m - 1)[1] = Math.max(ans.get(m - 1)[1], p[1]); // 更新右端点最大值} else { // 不相交,无法合并ans.add(p); // 新的合并区间}}return ans.toArray(new int[ans.size()][]);}
}作者:灵茶山艾府
链接:https://leetcode.cn/problems/merge-intervals/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

文章转载自:

http://ioxKVt3a.jypsm.cn
http://KtrI3r7C.jypsm.cn
http://i5dkjH9V.jypsm.cn
http://zFqdocE1.jypsm.cn
http://fqstQFWC.jypsm.cn
http://7AyPpKdG.jypsm.cn
http://6rT5CPdt.jypsm.cn
http://UMb9a0vU.jypsm.cn
http://AP41zeis.jypsm.cn
http://VVdGIWYF.jypsm.cn
http://4kRITZtz.jypsm.cn
http://3PT0EmBn.jypsm.cn
http://hVGz4kT5.jypsm.cn
http://ErhGfrGR.jypsm.cn
http://Xux8oEGS.jypsm.cn
http://DuvEkOM0.jypsm.cn
http://j6AKPxhA.jypsm.cn
http://4cbsH95J.jypsm.cn
http://5e0NljjP.jypsm.cn
http://qTW1Ytlk.jypsm.cn
http://PEM9y4VU.jypsm.cn
http://kIIdcHrL.jypsm.cn
http://isG81Xww.jypsm.cn
http://vHr5jtSH.jypsm.cn
http://99ywcGmN.jypsm.cn
http://Ku8zjQ6y.jypsm.cn
http://oWMPbS8p.jypsm.cn
http://DcX6mhCt.jypsm.cn
http://RGvxSsM2.jypsm.cn
http://Buxy0IuH.jypsm.cn
http://www.dtcms.com/a/382107.html

相关文章:

  • 用R获取 芯片探针与基因的对应关关系 bioconductor的包的 三者对应关系
  • xxl-job的使用
  • 2025 年 9 月 12 日科技前沿动态全览
  • 高德地图自定义 Marker:点击 悬停 显示信息框InfoWindow实战(Vue + AMap 2.0)
  • 猿辅导Java后台开发面试题及参考答案
  • 启动项目提示:org.springframework.context.annotation不存在问题
  • 从零开始的指针(3)
  • “移动零”思路与题解
  • 大模型训练框架:Swift 框架
  • [笔记] 来到了kernel 5.14
  • 【算法笔记】快速排序算法
  • 数据结构——顺序表(c语言笔记)
  • Java 黑马程序员学习笔记(进阶篇6)
  • Day04 前缀和差分 1109. 航班预订统计 、304. 二维区域和检索 - 矩阵不可变
  • Java 类加载与对象内存分配机制详解
  • 【数据结构——图与邻接矩阵】
  • 再次深入学习深度学习|花书笔记1
  • 信息检索、推荐系统模型排序质量指标:AP@K和MAP@K
  • 详解 OpenCV 形态学操作:从基础到实战(腐蚀、膨胀、开运算、闭运算、梯度、顶帽与黑帽)
  • 《2025年AI产业发展十大趋势报告》五十五
  • 【面试题】RAG优化策略
  • 06 一些常用的概念及符号
  • Oracle事件10200与10201解析:数据库读一致性CR与Undo应用
  • 新手向:C语言、Java、Python 的选择与未来指南
  • 【人工智能通识专栏】第十四讲:语音交互
  • 3.RocketMQ核心源码解读
  • 微信小程序开发教程(十一)
  • [硬件电路-194]:NPN三极管、MOS-N, IGBT比较
  • 零基础学AI大模型之AI大模型常见概念
  • [Dify] 插件节点用法详解:如何将插件整合进工作流