合并连续区间

本文介绍了如何解决合并区间的问题,通过排序并检测连续区间来优化结果,展示了JavaScript代码实现过程,并指出在实践中可能遇到的忽略点,以提升算法理解与记忆。
摘要由CSDN通过智能技术生成

题目

合并区间
输入:[[1, 2], [1, 5], [2, 3], [6, 8]]
输出:[[1, 5], [6, 8]

思路

典型的区间合并问题,目的是找出一堆区间里面的连续区间有多少个。
首先,可以用 sort 函数加上自定义比较规则,对各个区间做一个排序,要求优先按区间的第一位从小到大排序,第一位相同的区间按第二位从小到大排序。
然后,设置一个“上一区间”,与“当前区间”做对比,有连续区间则对该“上一区间”做更新,无连续区间则将“上一区间”存在结果里面,再将“当前区间”赋值给“上一区间”,接着向下比较。
如何判断是否有连续区间:
(1)若第一位相同,则将“上一区间”的第二位改成“当前区间”的第二位
(2)若第一位不相同:
a.“当前区间”的第一位大于“上一区间”的第二位,非连续区间;
b.“当前区间”的第一位小于“上一区间”的第二位,取“当前区间”和“当前区间”的第二位的较大值。

代码实现

/**
 * @param {number[][]} intervals
 * @return {number[][]}
 */
var merge = function(intervals) {
    //先对区间做排序,从小到大
    intervals.sort((a, b) => {
        if(a[0] < b[0]) return -1;
        if(a[0] > b[0]) return 1;
        if(a[1] < b[1]) return -1;
        if(a[1] > b[1]) return 1;
        return 0;
    })
    //开始合并区间
    const arr = new Array();
    let start = intervals[0];
    for(item of intervals) {
        if(item[0] == start[0]) {
            start[1] = item[1];
        }
        else {
            if(item[0] <= start[1]) {
                start[1] = Math.max(item[1], start[1]); //这里容易忽略
            }
            else {
                arr.push(start);
                start = item;
            }
        }
    }
    arr.push(start);
    return arr;
};

小结

以前做过的算法题,实现起来还是会有忽略的地方,以记促思,加深印象。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值