JS实现 合并区间问题

给出一个区间的集合,请合并所有重叠的区间。
输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

思路:

1.将数组按照第一位的大小进行排序(sort方法)
2.创建 新的数组 和 临时空间
3.从 临时空间 和 当前数组cur 进行判断
如果有重合的,将其合并,放入 临时空间 中。
如果没有重合的,将 临时空间 中的数组放入 新建的数组 中。
4.循环第3步

//Combine Array
var merge = function (intervals) {
    if (intervals.length === 0) return []
    let res = []
    intervals.sort((a, b) => a[0] - b[0]) //数组首位排序函数sort
    let candidate = intervals[0] //排序后选择第一个数组  (临时空间)
    for (let i = 1; i < intervals.length; i++) {
        let cur = intervals[i] //从第二个开始取cur
        if (candidate[1] >= cur[0]) { // 有重合 能合并
            candidate[1] = Math.max(cur[1], candidate[1]) // 左端不变 右端取大的
        } else { // 不重合 不能合并
            res.push(candidate)
            candidate = cur //把cur放进去临时控件
        }
    }
    res.push(candidate)
    return res
};

运行相关代码

intervals = [[1, 3],[4, 9],[8, 10],[15, 18]]
console.log(merge(intervals)) //[[1,3],[4,10],[15,18]]

Finish!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值