题解 | #合并区间#

合并区间

https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a

如何使用双指针合并区间?

  • 如果两个相邻的区间需要合并,那么此时前一个区间的末尾要大于后一个区间的开头,因此我们可以用一个指针用于遍历区间数组,还有一个指针指向原区间数组中的当前区间的开头,将当前区间的开头和合并区间数组的最后一个区间的末尾比较,来判断当前区间是否需要合并。
  • 为了能方便判断相邻区间是否需要合并,需要先对区间数组按每个区间的第一个元素来进行排序。

如何使用贪心思想合并区间?

  • 贪心思想属于动态规划思想中的一种,其基本原理是找出整体当中给的每个局部子结构的最优解,并且最终将所有的这些局部最优解结合起来形成整体上的一个最优解。
  • 最小子问题为两个相邻区间是否能合并,则我们每次判断合并区间数组的最后一个区间是否需要和原区间数组的当前区间合并,如果需要合并则更改合并区间数组最后一个区间的最后一个元素,如果不需要合并则将原区间数组的当前区间添加到合并区间数组的末尾。

参考

https://blog.nowcoder.net/n/e6177985fbe94fc1ab58e42c38564273?f=comment

https://blog.nowcoder.net/n/15540cfa99a1448887609dd237a18c6a?f=comment

class Interval {
    start: number
    end: number
    constructor(start: number, end: number) {
        this.start = start 
        this.end = end 
    }
}



/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param intervals Interval类一维数组 
 * @return Interval类一维数组
 */
export function merge(intervals: Interval[]): Interval[] {
    // write code here
    const ret: Array<Interval> = [];
    
    if (intervals.length <= 1) {
        return intervals;
    }

    // 原数组各个区间之间可能没有排序,需要先排序,由于题目要求最后合并的区间按起点升序排列,因此可以按各个区间的起点排列区间
    intervals.sort((a: Interval, b: Interval): number => {
        return a.start - b.start;
    })
    ret.push(intervals[0]);  // 第一个区间加入结果中,用于后面的合并

    for (let i = 1; i < intervals.length; ++i) {
        if (intervals[i].start <= ret[ret.length-1].end) {
            ret[ret.length-1].end = Math.max(intervals[i].end, ret[ret.length-1].end);
        }
        else {
            ret.push(intervals[i]);
        }
    }

    return ret;
}

全部评论

相关推荐

双飞二本嵌入式求拷打我是在&nbsp;BOSS&nbsp;上投递的简历,好多都没人回复,这是开场白和简历求大神帮忙看看。您好!我是2025届应届生,最快可在一周内上岗,能够实习六个月以上,并接受加班。以下是我的核心优势和相关经验:1.&nbsp;嵌入式开发能力:&nbsp;&nbsp;&nbsp;熟练掌握STM32系列单片机及其外设(如GPIO、定时器、ADC、DAC、I2C、SPI、UART等),能够独立完成硬件驱动开发和调试。&nbsp;&nbsp;熟悉FreeRTOS实时操作系统,具备多任务调度和资源管理经验。&nbsp;&nbsp;熟悉LVGL图形库开发,能够实现嵌入式设备的图形界面设计。2.&nbsp;硬件设计能力:&nbsp;&nbsp;&nbsp;具备PCB设计经验,曾为2023年工创赛物流搬运赛道设计小车主板,带领团队获得国家级银奖。&nbsp;&nbsp;&nbsp;熟悉硬件原理图分析,能够快速理解并调试硬件电路。3.&nbsp;机器人开发与竞赛经验:&nbsp;&nbsp;&nbsp;在全国大学生智能车竞赛、ROS机器人竞赛中多次获得国家级奖项,具备丰富的机器人开发经验。&nbsp;&nbsp;&nbsp;熟悉Linux环境,对ROS和ROS&nbsp;2有一定了解,能够进行机器人系统的开发与调试。4.&nbsp;编程能力:&nbsp;&nbsp;&nbsp;熟悉C/C++,熟悉Python,能够高效完成嵌入式开发和算法实现。&nbsp;&nbsp;&nbsp;具备良好的代码规范和文档编写能力。5.&nbsp;团队协作与领导能力:&nbsp;&nbsp;&nbsp;在多个项目中担任核心开发或团队负责人,具备良好的沟通能力和团队协作精神。&nbsp;&nbsp;&nbsp;在工创赛中带领团队完成项目规划、任务分配和技术攻关,展现了较强的领导力。我对嵌入式开发、机器人技术和智能硬件充满热情,期待加入贵公司,与团队共同成长,为公司创造价值!如果有合适的岗位,欢迎随时联系我,期待进一步沟通!
沉淀一会:嵌入式就是狗屎
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务