56. 合并区间 57. 插入区间 66. 加一

2023-10-30

56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

模拟过程

时间复杂度:O(nlogn),其中 n 为区间的数量。除去排序的开销,我们只需要一次线性扫描,所以主要的时间开销是排序的 O(nlogn)。

空间复杂度:O(logn),其中 n 为区间的数量。这里计算的是存储答案之外,使用的额外空间。O(logn) 即为排序所需要的空间复杂度。

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        # 按左值升序排列
        intervals.sort(key=lambda x: x[0])

        merged = []
        for interval in intervals:
            # 如果列表为空,或者当前区间右值小于待合并区间左值,直接添加
            if not merged or merged[-1][1] < interval[0]:
                merged.append(interval)
            else:
                # 否则的话,我们就进行合并
                merged[-1][1] = max(merged[-1][1], interval[1])

        return merged

57. 插入区间

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

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

示例 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]]

模拟过程

时间复杂度:O(n),其中 n 是数组intervals 的长度,即给定的区间个数。

空间复杂度:O(1)。除了存储返回答案的空间以外,我们只需要额外的常数空间即可。

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        left, right = newInterval
        flag = 0
        res = []

        for li, ri in intervals:
            # 区间不相交
            if ri < left:
                res.append([li, ri])
            # 区间不相交,但要先插入合并区间
            elif li > right:
                if not flag:
                    res.append([left, right])
                    flag = 1
                res.append([li, ri])
            # 区间相交,合并区间left,right
            else:
                left = min(li, left)
                right = max(ri, right)

        # 区间不相交,插入区间在末尾
        if not flag:
            res.append([left, right])

        return res

66. 加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

模拟过程

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)

        for i in range(n - 1, -1, -1):
            # digits 中所有的元素不均为 9
            if digits[i] != 9:
                digits[i] += 1
                for j in range(i + 1, n):
                    digits[j] = 0
                return digits

        # digits 中所有的元素均为 9
        return [1] + [0] * n
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

56. 合并区间 57. 插入区间 66. 加一 的相关文章

随机推荐

  • 国网B接口资源上报(Push_Resourse)接口描述和消息示例

    上篇blog 梳理了国网B接口的REGISTER接口描述和消息示例 前端系统加电启动并初次注册成功后 向平台上报前端系统的设备资源信息 包括 视频服务器 DVR DVS 摄像机 告警设备 环境量采集设备等模拟或数字信号采集设备信息 前端系统
  • C语言实现线性方程组的高斯消元法

    C语言实现线性方程组的高斯消元法 线性方程组是高等数学中常见的数学模型 解方程组的方法有很多 其中高斯消元法是一种较为普遍和常用的方法 在计算机编程中 我们可以使用C语言来实现高斯消元法 快速地求解线性方程组的解析解 高斯消元法原理 高斯消
  • RPN详解

    转载原文 https blog csdn net lanran2 article details 54376126 这里的博客都挺好的 转载一下 留的 RPN全称是Region Proposal Network Region Proposa
  • 计算机视觉面试题整理

    1 介绍目标检测网络yolo系列以及ssd系列的原理 yolo对小目标检测不好的原因 除了缩小anchor外还可以如何改善 Yolo目标检测 YOLO是一种实时目标检测算法 其核心思想是将目标检测问题归为一个回归问题 直接从输入图像中预测目
  • 小程序:微信开发者工具中页面一片空白怎么办?

    试过网上的更新工具 重启什么的 都无效 后面找到办法了 地雷 先删除 wxml 中的所有内容 换成最简单的
  • Required field 'serverProtocolVersion' is unset

    java sql SQLException Could not establish connection to jdbc hive2 localhost 10000 Required field serverProtocolVersion
  • 大数据可视化课程笔记 4

    文章目录 第四章 比例数据可视化 4 1 比例数据在大数据中的应用 4 2 整体与部分 4 2 1 饼图 4 2 2 环形图 4 2 3 比例中的重叠 4 2 4 矩形树图 4 3 时空比例 第四章 比例数据可视化 4 1 比例数据在大数据
  • 密码强度检测器

    我的CSDN主页 python 每日一练 题目 代码运行效果 完整代码 我的博文推荐 基础更熟代码更优 再炼同类问题 2022 11 27试炼 练习题目 定义一个名为 isStrongPassword 的函数 该函数将字符串作为参数 功能是
  • yolov5篇-快速开始使用yolov5

    基本需求 需要python gt 3 8和pip即可 剩下的环境搭建需求已经被列在即将下载的文件中的 requirements txt 中了 当然需要注意的是 如果你的电脑上被安装了很多的python版本 还请确定一下你使用的是否是正确的那
  • 在离线服务器上创建深度学习虚拟环境

    在离线服务器上创建深度学习虚拟环境 一 安装虚拟机 1 虚拟机软件和Ubuntu下载链接 2 注意事项 二 Linux平台下Anaconda虚拟环境配置 1 Anaconda安装 2 配置自己所需的深度学习环境 3 打包虚拟环境传送到服务器
  • C++中类和函数类型在java中的对应

    C Java 虚函数 普通函数 纯虚函数 抽象函数 抽象类 抽象类 虚基类 接口
  • C# 辗转相除法求最大公约数

    辗转相除法求最大公约数 public static void CalcGCD int largeNumber int smallNumber out int GCD GCD 1 int remain 1 while remain 0 rem
  • 推挽输出&&开漏输出

    在学习STM32的时候 我发现了一个很值得研究学习的问题 下面 用我的理解来阐述一遍 这其中的原理 首先请看电路图 在给GPIO配置输出的时候 其有两种工作模式可选 分别是推挽输出和开漏输出 在此之前先得了解mos管的工作原理 为了方便大家
  • 软件测试工作内容和职责有哪些

    目前 在IT行业中测试的职位数量仅次于开发 可以说是第二大技术就业岗位 然而许多人对测试师工作的理解还停留在 只需要像用户一样使用产品 然后发现有问题提交报告就行了 其实这是极其不准确的 软件测试师在测试产品前后通常有很多工作要做 下面我们
  • 计网笔记(1)- 计算机网络和因特网

    本章主要内容 构成网络的基本硬件和软件 我们将从网络的边缘开始 介绍网络中运行的端系统和网络应用 接下来探究网络的核心 介绍传输数据的链路和交换机 最后是连接端系统和网络核心的接入网和物理媒体 网络中数据的时延 丢包 吞吐量 计算机联网时的
  • stm32 串口发数据 0x00 变 0x80

    stm32 串口发数据 0x00 变 0x80 一般配置奇校验odd和偶校验even的时候 会出现这个问题 根本原因是stm32在计算长度的时候 会把校验位也计算进去 所以你之前设置的数据位8要改成数据位9才能正常运行 USART Init
  • Android Studio升级异常:Error : Program type already present: android.support.design.widget.CoordinatorLa

    解决的方案在build gradle增加 implementation com android support design 27 1 0 如图 最后Build一下就ok了 希望你跟我是一样的错误 能帮到你最好
  • [个人笔记]操作系统复习笔记

    一 绪论 OS的作用 用户与硬件之间的接口 管理计算机资源 抽象计算机资源 OS的发展 单道批处理系统 用户程序交给监控程序 由监控程序控制作业一个接一个交给IO处理 CPU等待IO 内存浪费 资源浪费 多道批处理系统 当一个作业在等待IO
  • 手动安装Kylin5.0版本的过程

    官方文档 https kylin apache org 目前kylin3 4版本是有docker版本和安装包的 5 0只有docker没有安装包 安装包 https kylin apache org download 安装kylin5 0
  • 56. 合并区间 57. 插入区间 66. 加一

    56 合并区间 以数组 intervals 表示若干个区间的集合 其中单个区间为 intervals i starti endi 请你合并所有重叠的区间 并返回 一个不重叠的区间数组 该数组需恰好覆盖输入中的所有区间 示例 1 输入 int