LeetCode刷题(python版)——Topic57插入区间

news/2024/5/19 19:14:36/文章来源:https://blog.csdn.net/weixin_54039182/article/details/127734760

一、题设

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

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

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

二、基本思路

        首先看到这题有点像上题的做法,但又不是很相同,问题是在于插入一个在合并,合并只需要考虑相邻范围有无重叠,而插入既要考虑相邻是否合并还要考虑一下插入的范围与左右范围的前后顺序,是左右分离(相对左、相对右两种情况),还是有交集。于是我起初是这么写的:

for l,r in intervals:if left > r:# 插入区间在右边res.append([l,r])elif right < l: # 插入区间在左边res.append([left,right])else: # 修改left、right值left = min(l,left)right = max(r,right)

        这段代码的意思就是:

        1.left > r : 当intervals = [[1,2]](l=1,r=2),newInterval = [[3,4]](left=3,right=4),则先加入[l,r],写到这里就发现问题了:intervals已经遍历完了,但是[3,4]并没有插入其中。

        2.right < l : 当intervals = [[3,4]](l=3,r=4),newInterval = [[1,2]](left=1,right=2),则先加入[left,right],同样这里的[3,4]也没有加入res中。

        3. else:代表有重合的部分,那么目前的范围就是左端最小与右端最大,即[min(l,left),max(r,right)]。

        我们假装不知道哪里有问题提交一下,看看有啥样例过不了:

        没毛病,果然不出所料,也是之前发现的问题,如何解决?

        虽然之前的例子中都是[3,4]没有插入,但是一个是intervals一个是newInterval。那么我们再看一下上面没过的样例:在遍历intervals中,到最后一个[6,9]是执行l > right,所以我们可以在最后加一个res.append([l,r])把这个[6,9]加上去。

        for l,r in intervals:if left > r:# 插入区间在右边res.append([l,r])elif right < l: # 插入区间在左边res.append([left,right])res.append([l,r])else: # 修改left、right值left = min(l,left)right = max(r,right)

        结果发现还是不过: 

         问题出在如果intervals数组只有一个元素且与newInterval有交集时,就会产生left,right有值但还没有来得及往res中存的问题。于是我们加上:res.append([left,right]):

        for l,r in intervals:if left > r:# 插入区间在右边res.append([l,r])elif right < l: # 插入区间在左边res.append([left,right])res.append([l,r])else: # 修改left、right值left = min(l,left)right = max(r,right)res.append([left,right])

        又又又报错了,是啥子原因呢?是因为两个res.append([left,right])重复了,于是我们使用一个tag标志位保证两个只能成立一个

        tag = Truefor l,r in intervals:if left > r:# 插入区间在右边res.append([l,r])elif right < l: # 插入区间在左边if tag:res.append([left,right])tag = Falseres.append([l,r])else: # 修改left、right值left = min(l,left)right = max(r,right)if tag:res.append([left,right])tag = False

         结果:

         错误原因是当[3,5]换完上下边界值的时候,因为tag已经是False了,所以[6,7]和[8,10]比较了但是没有存入res中,最后我们想到把tag放到最外面

        心态波了,理不清这种题的关系,完全是在碰答案... 

三、代码实现

def insert(self, intervals, newInterval):if not intervals:return [newInterval]left,right = newInterval # left,right记录每个结果的左右值res = []tag = Truefor l,r in intervals:if left > r:# 插入区间在右边res.append([l,r])elif right < l: # 插入区间在左边if tag:res.append([left,right])tag = Falseres.append([l,r])else: # 修改left、right值left = min(l,left)right = max(r,right)if tag:res.append([left,right])return res

四、效率总结

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ServletConfig和ServletContext接口

一、ServletConfig接口详解 1、简介 Servlet 容器初始化 Servlet 时&#xff0c;会为这个 Servlet 创建一个 ServletConfig 对象&#xff0c;并将 ServletConfig 对象作为参数传递给 Servlet 。通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。一个 Web 应用中…

【仿牛客网笔记】 Redis,一站式高性能存储方案——Redis入门

Redis可以开发对性能要求较高的功能。还可以利用Redis重构我们现有的功能。 NoSQL关系型数据库之外的统称。 快照有称为RDB 以快照的形式 不适合实时的去做&#xff0c;适合一段时间做一次。 日志又称AOF 以日志的形式每执行一次就存入到硬盘中&#xff0c;可以做到实时的存储以…

【python的静态方法,classmethod方法和__call___魔法方法】

classmethod魔法方法和staticmethodstaticmethod&#xff0c;静态方法classmethod&#xff0c;绑定类方法__call__&#xff0c;可调用类类方法staticmethod&#xff0c;静态方法 在python中&#xff0c;使用静态方法可以实现不需要实例化对象的绑定就可以直接调用的函数&#…

【Unity3D】游戏物体操作 ④ ( 选中多个游戏物体操作 | 复制选中物体 | 聚焦选中物体 | 激活、禁用选中物体 | 对齐选中物体 )

文章目录一、选中多个游戏物体操作1、Scene 场景窗口选中多个物体2、Hierarchy 层级窗口选中多个物体二、复制选中物体1、使用 " Ctrl D " 快捷键复制物体2、使用 右键菜单 | Duplicate 选项复制三、聚焦选中物体四、激活、禁用选中物体五、对齐选中物体一、选中多个…

计算机组成原理浮点数表示

浮点数表示 浮点数的表示分为阶码和尾数&#xff1b; 比如3.026*1011;阶码是11;尾数是3.026&#xff1b; 对于阶码&#xff1a; 阶符为正&#xff0c;小数点向后移n位&#xff08;n表示阶的大小&#xff09;; 阶符为负&#xff0c;小数点向前移n位&#xff08;n表示阶的大小&a…

AttributeError: ‘bytes‘ object has no attribute ‘encode‘异常解决方案

AttributeError: bytes object has no attribute encode是&#xff1a;“字节”对象没有属性的编码的意思。 很明显&#xff0c;是编码格式的问题&#xff0c;例如&#xff1a;已经是byte格式的字符串类型&#xff0c;二次进行encode的时候就会出现这个bug&#xff0c;示例如下…

【猿创征文】Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo

前两篇文章分享了基于 vite3 vue3 的组件库基础工程 vue3-component-library-archetype 和用于快速创建该工程的工具 yyg-cli&#xff0c;但在中大型的企业级项目中&#xff0c;通常会自主搭建这些脚手架或加速器。优雅哥希望每位前端伙伴能知其所以然&#xff0c;故接下来的文…

基础IO(下)——Linux

文章目录1. 理解文件系统1.2 背景知识1.2 inode vs 文件名1.3 软硬链接2. 动态库和静态库2.1 静态库.a2.1.1 如果想写一个库&#xff1f;&#xff08;编写库的人的角度&#xff09;2.1.2如果我把库给别人&#xff0c;别人怎么用呢&#xff1f;&#xff08;使用库的人的角度&…

中医-通过舌象判断身体状况

本文分享通过舌象判断身体的整体状况&#xff08;中医角度&#xff09;&#xff0c;得出一个可供辨证的参考&#xff0c;并且可以根据舌象做出相关的饮食调整&#xff0c;本文主讲理论&#xff0c;相关舌象图片易引人不适&#xff0c;如需找相关图片&#xff0c;可根据本文中的…

git rebase实战

例如&#xff0c; 在B分支上做rebase。 git rebase 之前确保当前分支是最新的。 切换到B分支&#xff1a; 1.git rebase origin/master(以origin/master分支为基线&#xff0c;合入master分支的修改到origin/master)此时会提示冲突文件 2.对冲突文件进行修改 3.git add 4.git …

网络面试-ox07http中的keep-alive以及长/短连接

非Keep-Alive: 早起HTTP1.0, 浏览器发起http请求需要与服务器建立新的TCP连接&#xff0c;请求处理后连接立即关闭。 缺点&#xff1a;每个这样的连接&#xff0c;客户端与服务器都要分配TCP的缓冲区和变量&#xff0c;这给服务器带来严重的负担。 Keep-Alive: 默认持久连接&am…

上海亚商投顾:沪指录得6连阳 两市成交再度破万亿

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日横盘震荡&#xff0c;收盘集体小幅上扬&#xff0c;日K线均录得6连阳。虚拟现实概念股集体拉升&#…

最详细、最全面的【Java日志框架】介绍,建议收藏,包含JUL、log4j、logback、log4j2等所有主流框架

前言 本文为 【Java日志框架】 相关知识&#xff0c;之前已经介绍了Java日志框架的发展历史&#xff1a;Java日志框架的发展历史。 这篇文章将对日志的概念与作用&#xff0c;JUL日志框架&#xff0c;Log4j日志框架&#xff0c;Logback日志框架&#xff0c;Log4j2日志框架&…

详谈一下:Java中的基本类型变量(8种)与引用类型变量的区别

对于Java语言中的基本类型&#xff0c;不知道各位老铁是否还能全能说出来&#xff01;&#xff01; Java语言中的8种基本类型&#xff1a; byteshortintlongfloatdoublecharbollen 上面8种Java语言中的基本类型&#xff0c;所对应的变量&#xff0c;就是基本类型变量&#xf…

【代码随想录】二刷-字符串

字符串 代码随想录如果想让这套题目有意义&#xff0c;就不要申请额外空间。 344.反转字符串 双指针 // 时间复杂度O(n),执行n/2次交换 // 空间复杂度O(1) class Solution { public:void reverseString(vector<char>& s) {int n s.size();for(int left 0,right n-…

浅谈CAD如何精准导入图新地球并应用在工程行业

摘要&#xff1a;本文以重庆九建某某高校施工项目前期准备和施工验证工作为依托&#xff0c;以图新地球精准导入CAD为研究对象&#xff0c;总结了一套相对成熟且完善的应用技术。该应用技术能在实际地形和现状数据中迅速找到施工点的大致位置&#xff0c;为前期工程勘测争取足够…

22下半年软考集成广东卷(中项)真题在线估分

22年下半年广东软考也已经落下帷幕了&#xff0c;整理的2022年下半年软考集成广东卷答案已经出炉&#xff01; 在线估分预测一下分数~ 大家锦鲤附身&#xff01;都能过&#xff01; 第5题 ”十四五"规划和2035远景目标纲要就打造&#xff08; &#xff09;新优势、加快&a…

5. 凸集和凸函数

凸集和凸函数1.仿射集2.凸集3.向量范数4.凸集的性质5.凸函数6.凸函数的一阶二阶条件7. 保凸运算8.凸函数和凸集的关系1.仿射集 2.凸集 仿射集 -------> 凸集 凸集 ----//----> 仿射集 3.向量范数 4.凸集的性质 5.凸函数 6.凸函数的一阶二阶条件 7. 保凸运算 凸函数的性…

海外拼多多Temu最新动态,怎么快速提升销量和权重?(测评补单)

上线一个多月后&#xff0c;拼多多跨境业务Temu的日均GMV突破了150万美元&#xff0c;入驻商家数量近3万个&#xff0c;SKU在30-40万&#xff0c;涵盖了24个一级类目。 据报道&#xff0c;目前Temu的日活成交用户在6万左右&#xff0c;下载用户接近80万&#xff0c;30天的复购…

vue3与vue2的不同内容

一、main.js入口文件的不同 // 引入的不再是构造函数&#xff0c;引入了一个名为creacteApp的工厂函数 import { createApp } from vue import ./style.css import App from ./App.vue // 创建应用示例对象--->app const app createApp(App) //把组件APP挂载到#app节点上 …