leetcode练习(汇总插入区间)

news2024/10/5 16:29:29

文章目录

      • 题目一:汇总区间
      • 题目二:插入区间

语言:python 工具:jupyuter

题目一:汇总区间

给定一个 无重复元素 的 有序 整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
“a->b” ,如果 a != b
“a” ,如果 a == b
示例 1:
输入:nums = [0,1,2,4,5,7]
输出:[“0->2”,“4->5”,“7”]
解释:区间范围是:
[0,2] --> “0->2”
[4,5] --> “4->5”
[7,7] --> “7”
示例 2:
输入:nums = [0,2,3,4,6,8,9]
输出:[“0”,“2->4”,“6”,“8->9”]
解释:区间范围是:
[0,0] --> “0”
[2,4] --> “2->4”
[6,6] --> “6”
[8,9] --> “8->9”

前提条件:给定一个无重复元素的有序整数数组 nums 。

期望返回值:返回恰好覆盖数组中所有数字的最小有 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。

举例:输入:[0,1,2,4,5,7]

​ 输出:[‘0->2’, ‘4->5’, ‘7’]

因为:0-2连续,4-5连续,7单独,连续的输出为a->b格式,单独的数字就输出a

​ 输入:[0,2,3,4,6,8,9]

​ 输出:[‘0’, ‘2->4’, ‘6’, ‘8->9’]

根据前提条件nums有两种情况:nums为空,nums不为空

如果nums为空,则返回空列表

如果不为空。进入下面算法

if not nums:
        return []
    res = []

当num不为空时,先定义两个指针start和end,表示区间的起始和结束位置,全都初始化为数组的第一个元素。sum[0]sum[0]

 start, end = nums[0], nums[0]

接下来开始遍历数组,从数组第二个元素开始如果当前元素与结束位置相邻,则将结束位置向后移动一位,否则将当前区间加入答案,并将起始和结束位置更新为当前位置。

举例:输入:[0,1,2,4,5,7]start和end是0,遍历sum[1]=1=end+1,则将end后移一位变成sum[1],当i=3是,sum[3]!=end+1证明这个递增区间结束了。

for i in range(1, len(nums)):
        if nums[i] == end + 1:
            end = nums[i]

于是把这个区间的开头和结尾按a->b的格式放到res中。

res.append(str(start) + "->" + str(end))

当然如果i=6时,这个区间只有一个整数7时,按a的格式放入res中

if start == end:
	res.append(str(start))

当一个区间结束,应将start和end更新为num[i]num[i]

start, end = nums[i], nums[i]

封装以上代码定义一个函数汇总区间函数

def summaryRanges(nums):
    if not nums:
        return []
    res = []
    start, end = nums[0], nums[0]
    for i in range(1, len(nums)):
        if nums[i] == end + 1:
            end = nums[i]
        else:
            if start == end:
                res.append(str(start))
            else:
                res.append(str(start) + "->" + str(end))
            start, end = nums[i], nums[i]
    return res

运行结果:

image-20230525200422122

因为遍历到最后一个元素时,最后一个区间没有被加入答案

if start == end:
    res.append(str(start))
else:
    res.append(str(start) + "->" + str(end))

更新后

def summaryRanges(nums):
    if not nums:
        return []
    res = []
    start, end = nums[0], nums[0]
    for i in range(1, len(nums)):
        if nums[i] == end + 1:
            end = nums[i]
        else:
            if start == end:
                res.append(str(start))
            else:
                res.append(str(start) + "->" + str(end))
            start, end = nums[i], nums[i]
    if start == end:
        res.append(str(start))
    else:
        res.append(str(start) + "->" + str(end))
    return res

image-20230525200801639

题目二:插入区间

给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 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]]

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

段代码首先定义一个空列表 res,用于存储合并后的区间列表。然后,从区间列表的第一个区间开始遍历

res=[]
i=0
n=len(intervals)

举例:

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

输出:[[1,5],[6,9]]

首先[1,3]和[2,5]比较,如果intervals最小的数比newlnterval最大的数小则肯定有重叠给的部分。

因为每个区间都是从小到大,intervals第一个元素是最小,newlnterval最后一个元素最小。

找到重叠部分则合并重叠区间。取intervals和newlnterval中最小元素和最大元素分别做新区间的开头和结尾。并将结果加入res

while intervals[i][0] <= newInterval[1]:
     newInterval[0] = min(newInterval[0], intervals[i][0])
     newInterval[1] = max(newInterval[1], intervals[i][1])
res.append(newInterval)

如果当intervals最大的数比newlnterval最小的数大,则肯定没重叠部分

如[6,9]和[2,5],那直接把intervals加入res即可

while intervals[i][1] < newInterval[0]:
	res.append(intervals[i])

封装插入区间的函数

def insert(intervals, newInterval):
    res = []
    i = 0
    n = len(intervals)
    while i < n and intervals[i][1] < newInterval[0]:
        res.append(intervals[i])
        i += 1
    while i < n 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)
    return res

image-20230525203854323

因为遍历到最后一个元素时,最后一个区间没有被加入答案

while i < n:
    res.append(intervals[i])

更新后

def insert(intervals, newInterval):
    res = []
    i = 0
    n = len(intervals)
    while i < n and intervals[i][1] < newInterval[0]:
        res.append(intervals[i])
        i += 1
    while i < n 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 < n:
    res.append(intervals[i])
    return res

image-20230525204039950

示例 :

输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]

输出:[[1,2],[3,10],[12,16]]

ile i < n:
res.append(intervals[i])
return res

示例 :

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/575249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“程序员,致敬!”

手机震动&#xff0c;提醒着我3年前参加研发的应用迎来了一次重大升级。我按下开源社区提供的合并请求按钮&#xff0c;与开源社区的朋友分享我对这个项目的改进。不久&#xff0c;一条消息提醒我合并请求已被其它社区成员审核通过。 这种远程协作、开源分享的方式是如今广泛存…

chatgpt赋能python:Python数值计算指南:为什么它是一种强大的工具

Python数值计算指南&#xff1a;为什么它是一种强大的工具 当谈到数值计算时&#xff0c;许多人所想到的编程语言都是MATLAB和R。然而&#xff0c;Python也在数值计算领域有着强大的地位。Python是一种令人难以置信的通用编程语言&#xff0c;它不仅为数据科学和机器学习提供了…

行人检测重识别yolov5+reid(跑通+界面设计)

行人检测重识别yolov5reid&#xff08;跑通界面设计&#xff09; 参考源代码: github 权重文件&#xff1a; 根据github上面的网盘进行权重下载&#xff1a; 检测&#xff1a;将 ReID_resnet50_ibn_a.pth放在person_search/weights文件下&#xff0c;yolov5s.pt放person_sear…

如何用海外代理辅助对接 ChatGPT

许多朋友问我有没有好用的海外代理。说实话&#xff0c;真的好用的并不多。 最近我了解到了一家还不错的海外代理&#xff0c;叫做 IPIDEA&#xff0c;我已经使用了一段时间了&#xff0c;觉得质量挺不错。 你可能知道&#xff0c;我最近在进行一些 ChatGPT 相关的研究&#xf…

DTW 2023:戴尔发力多云战略与边缘运营

近日&#xff0c;2023戴尔科技全球科技大会&#xff08;Dell Technologies World&#xff0c;简称DTW&#xff09;在美国拉斯维加斯如期而至。 作为戴尔科技集团一年一度的科技盛宴&#xff0c;本届DTW吸引了众多业界人士的关注。而作为本届大会的重头戏&#xff0c;戴尔科技集…

Spark学习笔记

1 spark简介 (1) spark是基于内存计算的分布式并行计算框架&#xff0c;如今已成为apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop、Spark、Storm)。 (2) spark组件 (3) spark组件应用场景 Spark Streaming&#xff1a;提供流计算功能 Sparl SQL&#xff1…

Python实现循环的最快方式(for、while等速度对比)

众所周知&#xff0c;Python 不是一种执行效率较高的语言。此外在任何语言中&#xff0c;循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位&#xff0c;将此操作重复执行上万次&#xff0c;最终耗费的时间也将增长上万倍。 while 和 for 是 …

JavaCV - 图像暗通道去雾

一、效果图 二、实现原理 暗通道先验:首先说在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值,也就是说该区域光强是一个很小的值。所以给暗通道下了个数学定义,对于任何输入的图像J,其暗通道可以用下面的公式来表示:其中JC表示彩色图像每个…

SOFA Weekly|SOFAChannel#33 直播预告、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

阿里、腾讯、京东齐降价:云计算迎来新拐点

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 618源于京东创办日&#xff08;创办于2004年6月18日&#xff09;&#xff0c;发展至今&#xff0c;618已然成为中国两大最火爆的消费节点之一。每年618&#xff0c;京东都会推出覆盖全品类的优惠政策&#xff0c;并以严格的…

chatgpt赋能python:Python捕获所有异常

Python 捕获所有异常 Python是一种易用、高效的编程语言&#xff0c;广泛应用于Web开发、数据科学、人工智能等领域。在Python编程中&#xff0c;异常处理是一项重要的技能&#xff0c;因为程序总会出现各种异常情况&#xff0c;如输入错误、网络错误、程序崩溃等等。Python提…

矿井水除氟——高矿化度矿井水氟化物深度降解的技术方案

高矿化度矿井水是指含有高浓度溶解性矿物质的废水&#xff0c;通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征&#xff0c;对环境…

(十七)ArcGIS 属性表生成GUID字段

ArcGIS 属性表生成GUID字段 目录 ArcGIS 属性表生成GUID字段 1.GUID概念2.GUID格式3. ArcGIS 属性表生成GUID字段3.1新建GUID字段3.2生成GUID字段 1.GUID概念 全局唯一标识符&#xff08;GUID&#xff0c;Globally Unique Identifier&#xff09;是一种由算法生成的二进制长度…

堆的实现+堆的应用(堆排序和Topk)

珍惜当下的一切&#xff0c;相信未来的一切都是美好的。 -- 丹尼尔迪凯托目录 一.堆的概念及结构 二.堆的各种函数的实现 1.结构体的内容 2.堆的初始化 3.堆的插入 4.堆的向上调整法 5.验证堆的向上调整法 6.堆顶的删除 7.堆的向下调整法 8.返回堆…

【Python】使用百度AI能力

知识目录 一、写在前面✨二、百度AI能力介绍三、植物识别四、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是初心&#xff0c;希望我们一路走来能坚守初心&#xff01; 今天跟大家分享的文章是 Python调用百度AI能力进行植物识别。 &#xff0c;希望能帮助到大…

欧盟加密监管法案通过,美国急了?

万众期待的欧盟《加密资产市场监管法案》&#xff08;Markets in Crypto-Assets Regulation&#xff0c;简称MiCA&#xff09;终于在5月16日尘埃落定。 尽管在4月20日&#xff0c;该方案已在欧洲议会全体会议上投票通过&#xff0c;但直到5月16日&#xff0c;包括27个国家的欧盟…

STP生成树协议(超详细小白也能看懂)

一、为什么要用STP 为了提高网络可靠性&#xff0c;交换网络中通常会使用冗余链路。然而&#xff0c;冗余链路会给交换网络带来环路风险&#xff0c;并导致广播风暴以及MAC地址表不稳定等问题&#xff0c;进而会影响到用户的通信质量。生成树协议STP&#xff08;Spanning Tree …

计算机毕业论文选题推荐|软件工程|系列十

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)多媒体教室管理…

Hugging News #0526: Hugging Cast 发布第一期、邀请来认领自己的论文啦!

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」&#xff0c;本期 Hugging News 有哪些有趣的消息…

es7.x Es常用核心知识快捷版1(分词和text和keyword)

一 分词 1.1 分词 1.1.1 查看分词 standard标准分析器是将每个字都分出来&#xff1b; 而ik_max_word是最细粒度的分词&#xff0c;将所有可能的词都分出来&#xff1b; ik_smart 是最粗粒度的分词&#xff1b; ik_smart 优点:特征是粗略快速的将文字进行分词,占用空间小…