力扣:57. 插入区间(Python3)

题目:

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

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

来源:力扣(LeetCode)
链接:力扣

示例:

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

解法:

首先处理特殊情况,如果intervals为空,返回newInterval;如果newInterval的右区间比intervals第1个区间的左区间小,说明newInterval比intervals中所有区间小,返回[newInterval] + intervals;同理,如果newInterval的左区间比intervals第最后一个区间的右区间大,返回intervals + [newInterval]。剩下的情况进入算法,结果存在result。

遍历intervals,如果newInterval的左区间大当前区间的右区间,说明没有交集,添加当前区间到result。否则,记录交集的左区间为当前区间和newInterval中小的左区间,设为left。接着从当前区间开始遍历剩下intervals,如果newInterval的右区间大于当前区间的右区间,说明newInterval的范围可以覆盖当前区间,所以可以跳过当前区间,如果当前已经是最有一个区间,设right为newInterval的右区间,然后添加[left, right]到result,返回result。如果newInterval的右区间小于等于当前区间的右区间,说明和newInterval有交集的最大右区间已出现,如果newInterval的右区间大于等于当前区间和左区间,设right为newInterval和当前区间中大的右区间,添加[left, right]到result,然后把后面区间也加入result。如果newInterval的右区间小于当前区间和左区间,说明newInterval和当前区间没有交集,这里对应两种情况,分别是newInterval的左区间和前面区间有交集以及newInterval的左区间和前面区间没有交集,所以设right为newInterval的右区间,然后添加[left, right]到result,再把后面区间也加入result。

代码:

class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:if len(intervals) == 0:return [newInterval]if newInterval[1] < intervals[0][0]:return [newInterval] + intervalsif newInterval[0] > intervals[-1][1]:return intervals + [newInterval]result = []for index1, interval1 in enumerate(intervals):if newInterval[0] <= interval1[1]:left = min(interval1[0], newInterval[0])for index2, interval2 in enumerate(intervals[index1:]):if newInterval[1] <= interval2[1]:if newInterval[1] >= interval2[0]:result.append([left, max(interval2[1], newInterval[1])])else:result.append([left, newInterval[1]])result.append(interval2)if index2 != len(intervals[index1:]) - 1:result.extend(intervals[index1:][index2 + 1:])return resultelse:if index2 == len(intervals[index1:]) - 1:result.append([left, newInterval[1]])return resultelse:result.append(interval1)

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

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

相关文章

springboot单元测试的详细介绍

当开发一个复杂的应用程序时&#xff0c;确保代码的正确性和稳定性至关重要。在这方面&#xff0c;单元测试是一个不可或缺的工具&#xff0c;它可以帮助开发人员验证代码的各个部分是否按预期工作。Spring Boot提供了丰富的测试支持&#xff0c;使编写和执行单元测试变得更加容…

基于长短期神经网络的风速预测,基于LSTM的风速预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的风速预测 完整代码: https://download.csdn.net/download/abc991835105/88171311 效果图 结果分析 展望 参考论文 背影 风速预测是一种比较难的预测,随机性比较大,长短期神经网络是一种改进党的RNN…

一文看懂Apipost接口自动化使用方法

随着项目研发进程的不断推进&#xff0c;软件功能不断增多&#xff0c;对于软件测试的要求也越来越高。为了提高测试效率和减少测试成本&#xff0c;许多软件测试团队借助于自动化测试工具来优化测试流程。Apipost也提供了自动化测试工具&#xff0c;在本文中&#xff0c;我们将…

libmpv使用滤镜处理视频进行播放

一、前言 作为一个功能强大的多媒体框架,libmpv为开发者提供了广泛的功能和灵活的控制权。滤镜是libmpv的一个重要特性,允许开发者对视频进行各种实时处理和增强,从而满足用户对于个性化、创意化和高质量视频体验的需求。 滤镜是一种在视频渲染过程中应用特定效果的技术。…

具有吸引子的非线性系统(MatlabSimulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

leetcode做题笔记56

以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 思路一&#xff1a;模拟题意 int comp(const void* a, …

根据制定的长度切割list值

88、根据制定的长度切割list值 依赖&#xff0c;谷歌开源的工具类库&#xff0c;非常的强大 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>29.0-jre</version> </dependency>其…

C#登录后携带cookie爬取数据

前一段时间&#xff0c;公司以前的一个数据采集任务突然之间采集下来的数据都是0了&#xff0c;也就是未登录状态能够获取到的数据&#xff0c;于是猜想肯定是网站的服务升级了&#xff0c;升级了数据接口的逻辑&#xff0c;于是便开始解决此问题。 此采集程序是由.net core开…

Java—IO 流

Java—IO 流 &#x1f50d;文件创建文件获取文件相关信息目录相关操作 &#x1f50d;IO 流理解流与文件流的分类FileInputStreamFileOutputStream文件拷贝FileReaderFileWriter节点流与处理流类型 BufferedReaderBufferedWriterBufferedInputStream BufferedOutputStream对象处…

Leetcode-每日一题【剑指 Offer 18. 删除链表的节点】

题目 给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。 返回删除后的链表的头节点。 注意&#xff1a;此题对比原题有改动 示例 1: 输入: head [4,5,1,9], val 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点&#xff0c;那么在调…

Target Network缓解DQN的动作价值的高估问题

1、高估问题产生的原因 原因1&#xff1a;由于噪声的存在&#xff0c;影响 m a x ( Q ) max(Q) max(Q)的估计最大值比真实的最大值更大&#xff0c;最小值比真实最小值更小&#xff1b; 原因2&#xff1a;Bootstrapping&#xff0c;DQN近似动作价值 Q Q Q&#xff0c;使用TD算…

备战大型攻防演练,“3+1”一套搞定云上安全

在重大活动保障期间&#xff0c;企业不仅要面对愈发灵活隐蔽的新型攻击挑战&#xff0c;还要在人员、精力有限的情况下应对不分昼夜的高强度安全运维任务。如何在这种多重压力下&#xff0c;从“疲于应付”迈向“胸有成竹”呢&#xff1f; 知己知彼&#xff0c;百战不殆&#…

用户体验旅程图:改进用户体验的好工具

用户体验旅程图&#xff1a;改进用户体验的好工具 怎么改进体验&#xff0c;是有方法的 用户情绪曲线来衡量用户感觉 趣讲大白话&#xff1a;没有流程刨析&#xff0c;就没法改进 【趣讲信息科技245期】 **************************** 企业管理需要基本的流程的 企业流程简称BP…

docker容器监控:Cadvisor+InfluxDB+Grafana的安装部署

目录 CadvisorInfluxDBGrafan安装部署 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 5、创建influxdb容器 6、创建Cadvisor 容器 7、查看Cadvisor 容器&#xff1a; &#xff08;1&#xff09;准备测试镜像 &#xff08;2&#xff09;通…

java判断字符串是否包含英文,以及英文个数

在Java中&#xff0c;可以使用正则表达式或字符遍历的方式来判断字符串是否包含英文字符&#xff0c;并统计英文字符的个数。 使用正则表达式判断字符串是否包含英文字符&#xff1a; String str "Hello, 你好&#xff01;"; boolean containsEnglish str.matche…

pycharm、idea、golang等JetBrains其他IDE修改行分隔符(换行符)、在Git CRLF、LF 换行符转换

文章目录 pycharm、idea、golang系列修改行分隔符我应该选择什么换行符JetBrains IDE&#xff0c;默认行分隔符 是跟随系统修改JetBrains IDE&#xff0c;默认行分隔符 在Git CRLF、LF 换行符转换需求Git 配置选项 pycharm、idea、golang系列修改行分隔符 一般来说,不同的开发…

JSX语法基础总结

题记&#xff1a;首先我们要了解一下jsx是什么&#xff0c;跟js有什么区别&#xff0c;其实就是js的语法糖&#xff0c;加上了xml的语法&#xff0c;使得产生虚拟dom更加的方便&#xff0c;简单说一下&#xff0c;xml就是存储数据的格式&#xff0c;想了解xml的话&#xff0c;可…

【陈老板赠书活动 - 10期】- 【Python之光:Python编程入门与实战】

陈老老老板&#x1f9b8; &#x1f468;‍&#x1f4bb;本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09; &#x1f468;‍&#x1f4bb;本文简述&#xff1a;生活就像海洋,只有意志坚强的人,才能到达彼岸。讲一些我刚进公司的学…

一篇文章告诉你帮助中心系统如何去落实用户的需求

我们在搭建帮助中心系统的时候最最最主要的就是要知道我们的客户到底需要什么&#xff01;我们又可以怎么帮到他们呢&#xff01;那我们就要开始思考&#xff0c;怎么才能洞察到客户的需求并且落实。今天looklook就从这个角度展开&#xff0c;教你们怎么去了解到客户的需求&…

solidworks(2)

记得选择双向