算法打卡day31

今日任务:

1)435.无重叠区间

2)763.划分字母区间

3)56.合并区间

435.无重叠区间

题目链接:435. 无重叠区间 - 力扣(LeetCode)

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:
输入: [ [1,2], [2,3], [3,4], [1,3] ]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:
输入: [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:
输入: [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

文章讲解:代码随想录 (programmercarl.com)

视频讲解:贪心算法,依然是判断重叠区间 | LeetCode:435.无重叠区间哔哩哔哩bilibili

思路:

  1. 排序:首先,我们需要对区间集合按照区间的左边界进行排序,这样可以确保后续的区间处理是按照左边界的顺序进行的。

  2. 遍历:接下来,我们从第二个区间开始遍历,逐个检查当前区间和前一个区间是否重叠。

  3. 判断重叠:如果当前区间的起始位置在前一个区间的结束位置之后,表示两个区间不重叠,我们将当前区间的结束位置更新为新的不重叠区间的结束位置。

  4. 移除区间:如果当前区间和前一个区间重叠了,我们需要移除一个区间。由于我们希望尽可能少地移除区间,因此选择移除当前区间的策略是优先选择与前一个区间重叠时间较短的区间。

  5. 更新不重叠区间的结束位置:如果当前区间的结束位置在前一个区间的结束位置之前,我们将更新不重叠区间的结束位置为当前区间的结束位置。

class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:# 如果区间集合为空,返回0if not intervals:return 0intervals.sort(key=lambda x: x[0])# 初始化移除区间的数量为0remove_count = 0# 初始化上一个不重叠区间的结束位置为第一个区间的结束位置end = intervals[0][1]for i in intervals[1:]:# 存在重叠区间if i[0] < end:# 更新重叠区间的右边界:选一个结束位置小的区间,减少重叠end = min(i[1],end)remove_count += 1else:end = i[1]return remove_count

感想:与上一题气球一样,删除重叠区间

763.划分字母区间

题目链接:763. 划分字母区间 - 力扣(LeetCode)

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。示例:
输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。提示:
S的长度在[1, 500]之间。
S只包含小写字母 'a' 到 'z' 。

文章讲解:代码随想录 (programmercarl.com)

视频讲解:贪心算法,寻找最远的出现位置! LeetCode:763.划分字母区间哔哩哔哩bilibili

思路:

要求尽可能多的片段,且同一字母最多出现在一个片段中。首先需要遍历一次字符串,记录每个字母最后出现的位置。然后再次遍历字符串,记录当前片段的开始位置和结束位置,保证当前片段内的字母不会出现在其他片段中。当遍历到一个字母的结束位置时,表示当前片段结束,可以将当前片段的长度添加到结果列表中。

具体步骤如下:

  1. 第一次遍历字符串,记录每个字母最后出现的位置,可以使用字典来存储每个字母的最后出现位置。
  2. 第二次遍历字符串,使用两个变量 startend 来表示当前片段的开始位置和结束位置,初始时均为 0。遍历过程中,更新 end 为当前字母的最后出现位置。
  3. 当遍历到当前位置等于 end 时,表示当前片段结束,可以将当前片段的长度添加到结果列表中,并更新 start 为下一个片段的起始位置(即 end + 1)。

class Solution:def partitionLabels(self, s: str) -> List[int]:last_index = {}  # 记录每个字母最后出现的位置for i, char in enumerate(s):last_index[char] = iresult = []  # 存储结果的列表start = end = 0  # 当前片段的起始位置和结束位置for i, char in enumerate(s):end = max(end, last_index[char])  # 更新当前片段的结束位置if i == end:  # 当前位置等于结束位置,表示当前片段结束result.append(end - start + 1)  # 将当前片段的长度添加到结果列表中start = end + 1  # 更新下一个片段的起始位置return result

56.合并区间

题目链接:56. 合并区间 - 力扣(LeetCode)

以数组 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] 可被视为重叠区间。
注意:输入类型已于2019年4月15日更改。 请重置默认代码定义以获取新方法签名。

文章讲解:代码随想录 (programmercarl.com)

视频讲解:贪心算法,合并区间有细节!LeetCode:56.合并区间哔哩哔哩bilibili

思路:

首先对输入的区间列表 intervals 按照区间的起始位置进行排序。然后,使用一个空列表 result 存储合并后的区间。

接下来,我们遍历排序后的区间列表,逐个考虑每个区间和当前合并后的最后一个区间之间的关系。

  • 如果当前区间和当前合并后的最后一个区间有重叠,我们将它们合并成一个区间,即更新当前合并后的最后一个区间的结束位置为这两个区间的结束位置的最大值。
  • 否则,当前区间和当前合并后的最后一个区间无重叠,我们将当前合并后的区间加入到 result 列表中,并更新当前合并后的区间为当前区间。

最后,将最后一个合并后的区间加入到结果列表中,并返回合并后的不重叠的区间列表 result

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:# 按照区间的起始位置进行排序intervals.sort(key=lambda x:x[0])# print(intervals)result = [] # 存储合并后的区间# 初始化起始位置和结束位置为第一个区间的起始位置和结束位置start = intervals[0][0]end = intervals[0][1]# 遍历排序后的区间列表for i in intervals[1:]:# 如果当前区间的起始位置小于等于当前合并后的最后一个区间的结束位置,# 则更新当前合并后的最后一个区间的结束位置为这两个区间的结束位置的最大值if i[0] <= end:end = max(end,i[1])else:# 否则,当前区间和当前合并后的最后一个区间无重叠,# 将当前合并后的区间加入到结果列表中,并更新起始位置和结束位置为当前区间的起始位置和结束位置result.append([start,end])start = i[0]end = i[1]# 将最后一个合并后的区间加入到结果列表中result.append([start, end])return result

这种思路比较好理解,我们可以根据上面的代码进行改进

直接将区间添加到结果集,与下一个区间比较,更新右边界

class Solution:def merge2(self, intervals: List[List[int]]) -> List[List[int]]:# 按照区间的起始位置进行排序intervals.sort(key=lambda x: x[0])merged = []  # 存储合并后的区间for interval in intervals:# 如果merged为空,或当前区间的起始位置大于当前合并后的最后一个区间的结束位置,则直接将当前区间加入到merged中if not merged or interval[0] > merged[-1][1]:merged.append(interval)else:# 否则,更新当前合并后的最后一个区间的结束位置为这两个区间的结束位置的最大值merged[-1][1] = max(merged[-1][1], interval[1])return merged

题目中说明了集合长度至少为1,说明没有空集合,但是这个为了代码的完整性,改进代码还是补充了判空

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

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

相关文章

React中子传父的方式及原理

方式挺多的&#xff0c;先说最常用的通过props进行父子组件的数据传递和修改以及原理 在React中&#xff0c;props不仅用于传递数据&#xff0c;它们也可以传递可以执行的函数&#xff0c;这使得子组件能够间接更新父组件的状态。这种方法强化了React的单向数据流策略&#xf…

【北京迅为】《iTOP-3588开发板系统编程手册》第5章 文件IO缓存

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

Cocos Creator 3D游戏成像全过程详解与Shader详解

前言 Cocos Creator是一款由Cocos2d-x团队开发的游戏开发引擎&#xff0c;它不仅支持2D游戏的开发&#xff0c;还能够创建3D游戏。在本文中&#xff0c;我们将详细介绍Cocos Creator 3D游戏成像的全过程&#xff0c;并深入探讨Shader的实现细节。 对惹&#xff0c;这里有一个…

【刷题】代码随想录算法训练营第十三天|239、滑动窗口最大值,347、前K个高频元素,总结

目录 39、滑动窗口最大值347、前K个高频元素栈与队列总结 39、滑动窗口最大值 讲解&#xff1a;https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.html 使用单调队列。 在代码随想录里好好理解一下单调队列处理这道滑动窗口最…

龙智 DevSecOps 解决方案:集成 Jira/Confluence/HelixCore/SonarQube 等知名工具的技术实践与协作场景演示

随着企业数字化转型的深入推进&#xff0c;传统的研发流程已难以适应快速变化的市场需求&#xff0c;企业需要更加高效、协同且安全的研发模式来确保产品的质量和竞争力。DevSecOps 作为一种创新的研发方法论&#xff0c;将安全性融入 DevOps 工作流程中&#xff0c;实现从代码…

使用keil开发stm32串口

1,初始化IO串口1,pclk2:PCLK2时钟频率(Mhz),波特率9600, 中断向量一般配置用中断方式接收数据 I/O口配置:TXD配置为复用推挽输出(GPIO_Mode_AF_PP),RXD配置为浮空输入(GPIO_Mode_IN_FLOATING); void uart_init(u32 pclk2,u32 bound) { float temp;u16 mantissa;…

WebApis知识总结以及案例(续3)

综合案例 小兔鲜页面注册 分析业务模块 发送验证码模块 用户点击之后&#xff0c;显示05 秒后重新获取 时间到了&#xff0c;自动改为重新获取 //1.发送短信验证码模块const codedocument.querySelector(.code)let flagtrue//通过一个变量来控制 节流阀 // 1.1 点击事件co…

Unity URP 2021 Release-Notes

&#x1f308;Unity URP 2021 Release-Notes 版本更新内容2021.3.32URP: Vulkan URP will use MSAA samples count fallback from player settings. Prior to this x2 fallback would have been to upgrade to x4.(UUM-741)2021.3.29URP: 2D - Fix additional draw call when F…

【MATLAB源码-第51期】基于matlab的粒子群算法(PSO)的栅格地图路径规划。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都…

盲人专用软件定制开发:突破出行壁垒,点亮生活之路

身为一名资深记者&#xff0c;我始终关注着各类社会群体面临的挑战与应对策略。今天&#xff0c;我将目光投向了一个特殊群体——盲人&#xff0c;以及一款旨在破解他们独立出行难题的盲人专用软件。这款应用叫做蝙蝠避障&#xff0c;它通过定制开发&#xff0c;以先进的技术手…

前端H5实现视频上传,并截取第一帧作为封面。解决微信内ios系统无法上传视频的问题,解决ios截取视频作为封面的问题。

前端H5实现视频上传&#xff0c;并截取封面 前端实现视频上传&#xff0c;并截取第一帧作为封面。 写的过程中出现的问题&#xff1a; 在微信内ios系统无法上传视频&#xff0c;无法触发addEventListener的loadedmetadata解决完1问题后&#xff0c;ios截取视频第一帧作为封面…

git设置ssh秘钥远程连接

文章目录 1、生成rsa秘钥2、将rsa秘钥添加到远程仓库平台 我们在往github上push项目的时候&#xff0c;使用SSH&#xff08;安全外壳协议&#xff09;代替HTTPS来推送和拉取Git仓库的内容是一个更为方便和安全的方式&#xff0c;特别是在频繁与远程仓库交互的情况下。通过配置S…

第九届少儿模特明星盛典 全球赛首席体验官『韩嘉滢』精彩回顾

2024年1月30日-2月1日&#xff0c;魔都上海迎来了龙年第一场“少儿形体行业美育春晚”&#xff01;由IPA模特委员会主办的第九届少儿模特明星盛典全球总决赛圆满收官&#xff01;近2000名少儿模特选手从五湖四海而来&#xff0c;决战寒假这场高水准&#xff0c;高人气&#xff…

【算法】删除链表中重复元素

本题来源---《删除链表中重复元素》。 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入…

46.HarmonyOS鸿蒙系统 App(ArkUI)网格布局

Grid(){GridItem(){Button(按钮1).fontSize(28)}.backgroundColor(Color.Blue)GridItem(){Text(数学).fontSize(28)}.backgroundColor(Color.Yellow)GridItem(){Text(语文).fontSize(28)}.backgroundColor(Color.Green)GridItem(){Text(英语).fontSize(28)}.backgroundColor(Co…

如何监控tomcat的性能

关键指标 tomcat的关键指标有吞吐量、响应时间、错误数、线程池、cpu以及JVM内存。其中前三3个指标是最值得我们关注的业务指标。 部署和管理Web应用程序时&#xff0c;监控Tomcat的性能是至关重要的。Tomcat是一个流行的开源Servlet容器&#xff0c;用于托管Java Web应用程序。…

极速充电!一键解决苹果手机充电慢的问题

现如今&#xff0c;手机是我们日常生活中不可或缺的一部分&#xff0c;我们经常会使用它来刷短剧、看小说、读新闻等。然而&#xff0c;有时我们可能会遇到苹果手机充电慢的问题&#xff0c;这不仅影响了手机的用户体验&#xff0c;还可能给我们的生活带来一些不便。 遇到这种…

单细胞核转录组——植物:叶叶我呀裂开啦~

单细胞转录组测序技术能够在单细胞分辨率下研究样本的转录组信息&#xff0c;可以完美解决细胞异质问题&#xff0c;能全面真实揭示细胞多样性和复杂性&#xff0c;能够更加深入地研究细胞类型、细胞功能、细胞亚群及其异质性、细胞谱系等&#xff0c;还常用于识别新的细胞类型…

cesium 指定点旋转rectangle entity方式 坐标篇

cesium中rectangle是水平垂直于正北方向的&#xff0c;rectangle的属性中有rotation&#xff0c;但是rotation是以矩形的中心点进行旋转的&#xff0c;旋转过程中矩形的形状可能会变形&#xff0c;如果需要以矩形的顶点为原点进行旋转&#xff0c;可以采用entity的方式添加poly…

2024年外贸行业营销神器推荐

2024年外贸行业营销神器推荐&#xff1a;外贸人每天面对的不是国内客户&#xff0c;而是全球客户&#xff0c;相对于国内来说&#xff0c;会更加麻烦和繁琐&#xff0c;今天就码一篇2024年外贸行业营销神器的推荐文章&#xff0c;希望可以减轻各位外贸人的负担&#xff01; 1、…