leecode56 合并区间

LeeCode56.合并区间 以下为官方题解的内容,只是对代码进行解释 def merge(intervals): intervals.sort(key=lambda x:x[0]) ''' key= 表示按哪个键排序 次数x[0]表示左端点,x[1]表示右端点 ''' merged = [] #存储无重叠的区间 for interval in intervals: #如果列表为空,或者当前区间(merged)右端点小于上一区间的做端点,则直接添加 if not merged or merged[-1][1]&l. 阅读详情

在这里插入图片描述

我的思路

题目分析:

  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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
✔B【AD623】【单运放】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号 【】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号 阅读详情

相关推荐

QT日志输出终极指南:从qDebug到qFatal的完整文件记录方案

本文深入探讨了QT日志系统的企业级文件记录方案,从基础的qDebug、qWarning、qCritical、qFatal等宏的使用,到构建自定义消息处理器、实现异步写入、分级存储、日志轮转及性能监控等高级功能。旨在帮助开发者构建一个稳定、高效且易于维护的专业级日志管理架构,适用于桌面应用、嵌入式系统及服务端程序。

ik678901234的博客 909

LeeCode 56.合并区间

文章摘要: 该算法用于合并重叠区间。首先对区间按起始值排序,然后遍历比较当前区间与结果集中最后一个区间的关系。若当前区间起始值大于结果集最后一个区间的结束值,则直接加入结果集;否则合并两个区间(取结束值的较大者)。示例输入[[1,3],[2,6],[8,10],[15,18]]输出[[1,6],[8,10],[15,18]],测试结果正确。核心代码包含排序、合并逻辑及边界处理。

u012116089的博客 283

JDK8升级JDK17过程中遇到的那些坑

JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。

BASK2312的博客 6685

PHP实现leecode 56.合并区间

题目描述: ···txt 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视...

qq_34399191的博客 385

Vlan的封装模式和端口讲解(Access、Trunk、Hypbrid端口)

Vlan(Virtual Local Area Network)虚拟局域网,将一个物理的LAN在逻辑上划分为多个广播域,在交换机上实现广播域隔离(增强局域网的安全性、限制广播风暴、简化网络管理)Vlan通过将二层数据帧打上Vlan标签(打上Vlan标签也就是封装Vlan),正常情况下,不同Vlan Tag的数据包是无法二层直接互访的,以此来实现广播域的隔离可以理解为一个Vlan对应一个广播域,同一Vlan内的主机可以二层直接通信,不同Vlan间的主机无法二层直接通信。

m0_49864110的博客 5642

基于Python的船舶AIS数据爬取与分析:从数据采集到可视化实战

本文详细介绍了如何使用Python构建一个完整的船舶AIS数据爬取与分析系统。文章从AIS系统的基本原理讲起,逐步深入到数据采集、存储、清洗、分析和可视化的全流程。我们将使用最新的Python技术栈,包括aiohttp异步爬虫、MongoDB存储、Pandas数据处理以及Pydeck三维可视化等。本文提供了完整的代码实现,并探讨了在实际应用中可能遇到的问题及其解决方案。关键词:AIS数据、Python爬虫、异步IO、数据可视化、海事分析。

2201_76125261的博客 811

LeeCode(排序)56_合并区间

LeeCode(排序)56_合并区间 题目: 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: intervals = [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals = [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 来源:力扣(LeetCode)

u013456390的博客 153

linux驱动由浅入深系列:基于高通平台分析触摸屏(TP)、虚拟按键驱动

触摸屏的触摸板(touch panel简称TP)驱动的基本架构和普通按键驱动基本一致,可以参考文章:linux驱动由浅入深系列:输入子系统之二(编写一个gpio_key驱动)。只是其功能稍稍复杂些,配置也多些,下面一起来看一下。 TP包括 触摸屏、虚拟按键、虚拟按键背光灯 TP驱动芯片厂商主要有:Goodix(汇顶),FocalTech(敦泰科技),cypress(赛普拉斯),synapt

Radia的专栏 4767

leecode56.合并区间

跟前几次的合并区间题目差不多,每次如果当前的区间没和上一次重叠就放入结果数组中,否则就将这次重叠的和结果数组中的区间尾部做对比选择二者当中最大的作为区间尾部。

weixin_74175349的博客 337

090、Sensor上电时序与帧同步的驱动级实现——以索尼IMX766为例的AVDD/DVDD/IOVDD时序调优

摘要: 本文以索尼IMX766传感器为例,深入探讨了传感器上电时序与帧同步的驱动级实现问题。通过分析某车载项目量产中的高温黑屏故障,揭示了AVDD/DVDD/IOVDD时序偏差导致传感器内部状态机异常的根源。文章详细解读了IMX766三路电源的时序约束(如AVDD与DVDD需在1ms内同步至90%),并提供了驱动代码级实现方案,包括电源使能顺序、延时控制及帧同步配置。针对多摄同步场景,强调了曝光时间寄存器写入一致性的重要性。最后结合产线问题定位经验,提出通过示波器抓取电源波形验证时序合规性的方法。全文聚焦硬

zzfmlxs的博客 259

【2026最新版】python点云处理算法汇总(长期更新版)

python点云处理算法整理。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 42万+

区间比较_Leecode 56 合并区间心得

问题:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].解题思路:为了将不同区间合并,我们需要判断两区间内是否存在重叠关系,比如 区间 [1,3] 和 [2,6]中,2与3重叠。判断方法为比较两区间左右两边边界数字的大小。对区间i和j:如果 且 (条件...

weixin_36158842的博客 151

网红商品数据抓取:基于Python的高效爬虫实战

本篇博客介绍了从爬取到存储、分析和可视化网红商品数据的完整流程。通过Python的强大生态,我们能够轻松完成复杂的数据抓取任务。在实际应用中,还可以将此爬虫与机器学习模型结合,进一步挖掘数据价值。

2201_76125261的博客 1476

【Leecode】Leecode刷题之路第56天之合并区间

代码示例:(Java)代码示例:(Java)

工一木子 416

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Leecode刷题笔记——56. 合并区间

题目要求:给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 ...

Tyxxxxxx 227

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

leecode算法《56. 合并区间》详解有注释,简单明了。

leecode算法《56. 合并区间》详解有注释,简单明了。 原题内容 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] ...

qq_35971301的博客 219

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

15 合并区间(leecode 56)

1 问题 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: intervals = [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals = [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 2 解法 首先,将区间按照左边界由小到大顺序进行排列。 当前一个区

weixin_42454048的博客 197

leecode 56. 合并区间-java toArray用法

二维数组的按照排序大小的方法要记住同时还有list集合转为数组的形式以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。代码案例:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]

qq_41810415的博客 421

LeeCode56合并区间(Java)(队列)

题目链接:LeeCode56合并区间 题目描述: 先排序(以二维数组首数字排序),用一个队列存当前待解决的序列(不确定下一个范围是否和当前范围重叠时为待解决序列)。当待解决序列右边界小于下一序列左边界时出队,将下一个序列放进来,依次类推,该题需要注意返回的数组长度有比原来数组长度小的概率,故应该再开一个数组转一下,如果有大佬会别的方法教教我也行qaq class Solution { public static int[][] merge(int[][] intervals) { Q

weixin_43590593的博客 144

刷题升级之路:LeeCode——56.合并区间

区间的贪心策略

weixin_53215555的博客 182

Leecode热题100-56.合并区间

Leecode热题100-56.合并区间,字节绝对高频面试题,务必掌握

个人专长:数据结构和算法、大数据、数据库、主流框架 538

每日一练:LeeCode-56、合并区间【数组+滑动窗口】

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

小孔靠得住的博客 493

Leecode(217)56.合并区间-中等

区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。

qq_51999844的博客 179

Leecode热题100---56:合并区间

C++和python实现Leecode--56:合并区间

qq_41920323的博客 317

Leecode56:合并区间(贪心算法)

第一眼看到这个题目觉得应该是比较第一个值的大小,因为如果第n个值比n-1个值的右边还小于等于,那么说明区间可以连起来。千万记得排序后分清楚哪个是原本的哪个是当前的!以及新加一个不可以直接加{L, R},需要开辟一个新空间!Arrays.sort()函数里,

MengyuyangEddy的博客 360

代码随想录算法训练营第三十六天 | LeeCode 435. 无重叠区间 ,763.划分字母区间 , 56. 合并区间

最后发现是想的太简单了,没有考虑到后面的区间包含的范围比前面的区间小的情况,从而不能找出最小区间,导致不能找到最小删除次数。和昨天的社保气球很像,按照那个思路写了一下,发现还是有些案例不能通过。当右边界right==最远位置就可以把他放进答案里面了。用一个数组来表示出现过字符的最远位置。

thels_的博客 500
上一篇: 深度学习入门,基于python的理论与实现
下一篇: Mamba模型介绍
TranquilGlow
博客等级 码龄5年 132粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值