每日一道算法题(11.22)

339 阅读1分钟
  • 题目来自力扣
  • 文章只记录个人解题思路,并非最优
  • 每周一至周五每日一题,周末不更新

57. 插入区间

给出一个无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

注意:

不能使用代码库中的排序函数来解决这道题。

实例
输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]

输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]]
解释: 这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

链接:leetcode-cn.com/problems/in…

解题

将新的区间push进数组,然后排序,根据之前合并区间的思路,但我感觉这道题应该在考别的,我一时没想到

var insert = function(intervals, newInterval) {
    intervals.push(newInterval)
    intervals.sort((a, b) => a[0] - b[0])
    let res = []
    for (let i = 0; i < intervals.length; i++) {
        let left = intervals[i]
        let right = intervals[i+1] || []
        if (left[1] >= right[0] && right.length) {
            intervals[i+1] = [left[0], Math.max(left[1], right[1])]
        } else {
            res.push(left)
        }
    }
    return res
};