zoukankan      html  css  js  c++  java
  • LeetCode 57. 插入区间

    57. 插入区间

    Difficulty: 中等

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

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

    示例 1:

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

    示例 2:

    输入: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] 重叠。
    

    示例 3:

    输入:intervals = [], newInterval = [5,7]
    输出:[[5,7]]
    

    示例 4:

    输入:intervals = [[1,5]], newInterval = [2,3]
    输出:[[1,5]]
    

    示例 5:

    输入:intervals = [[1,5]], newInterval = [2,7]
    输出:[[1,7]]
    

    提示:

    • 0 <= intervals.length <= 10<sup>4</sup>
    • intervals[i].length == 2
    • 0 <= intervals[i][0] <= intervals[i][1] <= 10<sup>5</sup>
    • intervals 根据 intervals[i][0]升序 排列
    • newInterval.length == 2
    • 0 <= newInterval[0] <= newInterval[1] <= 10<sup>5</sup>

    Solution

    图片来源:https://blog.csdn.net/qq_17550379/article/details/87712075

    如上图,待插入的区间与现有区间只会有以上四种情形,如果待插入的区间与已有的区间有交集,即图中的前三种情况,并且这三种情况都满足当前区间的第一个元素小于等于待插入区间的第二个元素:intervals[i][0] <= newInterval[1],待插入的区间与现有的区间逐个比较,如果没有交集的话直接放入结果集,否则更新待插入区间的左右端点。

    时间复杂度:O(N)

    空间复杂度:O(N)

    class Solution:
        def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
            i, res = 0, []
            inter_len = len(intervals)
            # 无交集:新的区间和现有的区间没有交集
            while i < inter_len and intervals[i][1] < newInterval[0]:
                res.append(intervals[i])
                i += 1
            # 有交集,但是不一定会直接合并
            while i < inter_len and intervals[i][0] <= newInterval[1]:
                newInterval[0] = min(newInterval[0], intervals[i][0])
                newInterval[1] = max(newInterval[1], intervals[i][1])
                i += 1
            res.append(newInterval)
            # 剩余的部分
            while i < inter_len:
                res.append(intervals[i])
                i += 1
            return res
    
    # runtime:48 ms
    # memory:16.3 MB
    
  • 相关阅读:
    js防止按钮被多次点击
    jQuery:localStorage用法
    jQuery Ajax 前端和后端数据交互的问题
    <img>总结: 动态创建等问题
    jQuery
    Echarts 饼图(series)标题文字太长的换行设置
    echarts 为x轴、y轴添加滚动条
    video.js的应用
    关于跨域问题的详解
    麻省理工18年春软件构造课程阅读04“代码评审”
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14510090.html
Copyright © 2011-2022 走看看