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

2025年- H12-Lc119-56.合并区间(普通数组)---java版

1.题目描述

在这里插入图片描述

2.思路

思路参考了代码随想录:

按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。(本题相邻区间也算重贴,所以是<=)
如果有合并,则把合并区间加入到结果数组中,如果没有合并,则将该区间加入到数组中。

例子:
在这里插入图片描述

在这里插入图片描述
return res.toArray(new int[res.size()][]);
//将 LinkedList<int[]> 转换成 int[][] 数组作为最终结果返回。

补充2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

补充2:
在这里插入图片描述

补充3:
在这里插入图片描述

3.代码实现

方法1:不带测试用例

class Solution {public int[][] merge(int[][] intervals) {//?创建一个链表,res是动态的,可以随时插入和删除数组LinkedList<int[]> result=new LinkedList<>();//先将无序的二维数组,用自定义的规则进行排序,注意这块内容不熟练。将二维数组的左区间进行排序。Arrays.sort(intervals,(a1,a2)->Integer.compare(a1[0],a2[0]));//将第一个区间加入到res中,用于后序区间的比较和合并result.add(intervals[0]);//进行比较,如果第一个区间的右边界小于第二个区间的左边界,则进行合并//二维数组可以看作一维数组的数组,i从第二个元素开始(i=1),因为第一个元素(i=0)已经加入到res中for(int i=1;i<intervals.length;i++){if(result.getLast()[1]>=intervals[i][0]){//开始判断新区间的起始位置和结束位置,因为经过排序后,左边界的最小值是res一开始加入的区间的左边界int begin=result.getLast()[0];int end=Math.max(result.getLast()[1],intervals[i][1]);//删除原来的旧区间result.remove(result.getLast());// result.removeLast();//将合并的新区间(一维数组)加入到res中,result.add(new int[]{begin,end});}else{//如果两个区间不重合,直接把当前区间(Y一维数组)加入到结果数组中result.add(intervals[i]);}}return result.toArray(new int[result.size()][]);}}

方法二:带测试用例

import java.util.Arrays;
import java.util.LinkedList;public class H56 {public int[][] merge(int[][] intervals) {//?创建一个链表,res是动态的,可以随时插入和删除数组LinkedList<int[]> result=new LinkedList<>();//先将无序的二维数组,用自定义的规则进行排序,注意这块内容不熟练。将二维数组的左区间进行排序。Arrays.sort(intervals,(a1,a2)->Integer.compare(a1[0],a2[0]));//将第一个区间加入到res中,用于后序区间的比较和合并result.add(intervals[0]);//进行比较,如果第一个区间的右边界小于第二个区间的左边界,则进行合并//二维数组可以看作一维数组的数组,i从第二个元素开始(i=1),因为第一个元素(i=0)已经加入到res中for(int i=1;i<intervals.length;i++){if(result.getLast()[1]>=intervals[i][0]){//开始判断新区间的起始位置和结束位置,因为经过排序后,左边界的最小值是res一开始加入的区间的左边界int begin=result.getLast()[0];int end=Math.max(result.getLast()[1],intervals[i][1]);//删除原来的旧区间result.remove(result.getLast());//result.removeLast();//将合并的新区间(一维数组)加入到res中,result.add(new int[]{begin,end});}else{//如果两个区间不重合,直接把当前区间(Y一维数组)加入到结果数组中result.add(intervals[i]);}}return result.toArray(new int[result.size()][]);}public static void main(String[] args){H56 test2=new H56();int[][] intervals={{1,3},{2,6},{8,10},{15,18}};int[][] res=test2.merge(intervals);System.out.println("合并后的区间结果:");for(int[] m:res){//m本来是1维数组带花括号,打印成中括号的1维数组System.out.println(Arrays.toString(m));}}}

在这里插入图片描述

http://www.xdnf.cn/news/218719.html

相关文章:

  • 【AI论文】Skywork R1V2:用于推理的多模态混合强化学习
  • (计数)洛谷 P8386 PA2021 Od deski do deski/P10375 AHOI2024 计数 题解
  • DataTransfer API 教程
  • 零训练成本优化LLM: 11种LLM权重合并策略原理与MergeKit实战配置
  • OCR技术,金融行业的“数字魔法”✨
  • 推荐系统在线离线打分不一致:核心原因与全链路解决方案
  • LeetCode 155题解 | 最小栈
  • 应用安全系列之四十七:NoSQL注入
  • Spring Boot集成Spring Cloud 2024(不使用Feign)
  • Ubuntu如何查看硬盘的使用情况,以及挂载情况。
  • 非线性现实:绘制复杂系统的图景及AI推理
  • C语言按位操作符
  • 近期实践总结
  • k8s术语pod
  • PTA 天梯赛 7-11:关键活动 ← AOE网
  • 【时时三省】(C语言基础)利用数组处理批量数据
  • mmap核心原理和用途及其与内存映射段的关系
  • 5大常见环保行业OA系统,注重项目管理
  • 全局id生成器生产方案
  • 如何解决管家婆软件录单选择商品时不出来商品选择框
  • ETL数据集成与数据资产的紧密关联,解锁数据价值新密码
  • 一起来学 Vue 3
  • C++ 简单线程池实现
  • 线程数据同步的三种方式
  • Qwen多模态系列论文
  • C语言中的POSIX线程与多线程编程:从入门到实践
  • Java SE(5)——数组
  • Java基础学习内容大纲
  • 【Qt】Qt换肤,使用QResource动态加载资源文件
  • AI时代来临将带来文科复兴