当前位置: 首页 > news >正文

代码随想录算法训练营第31天—贪心算法05 | ● 435. 无重叠区间 ● *763.划分字母区间 ● *56. 合并区间

435. 无重叠区间

https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html

  • 考点
    • 贪心算法
    • 重叠区间
  • 我的思路
    • 先按照区间左坐标进行排序,方便后续处理
    • 进行for循环,循环范围是0到倒数第二个元素
    • 如果当前区间和下一区间重叠,结果计数加1,同时令下一区间的右坐标等于两个区间右坐标中的较小者,这里体现出了贪心的思路,因为取较小者即令区间尽可能小,也就降低了其与其它区间重叠的可能
    • 计数完毕后返回即可
  • 视频讲解关键点总结
    • 和我的思路类似
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort(key=lambda x: x[0])result = 0for i in range(len(intervals) - 1):if intervals[i + 1][0] < intervals[i][1]:result += 1intervals[i + 1][1] = min(intervals[i][1], intervals[i + 1][1])return result

*763.划分字母区间

https://programmercarl.com/0763.%E5%88%92%E5%88%86%E5%AD%97%E6%AF%8D%E5%8C%BA%E9%97%B4.html

  • 考点
    • 本题不是贪心,但思路近似于重叠区间,因此放到这里
    • 如何记录字母最后出现的位置
    • 有了字母最后位置,如何让整个区间的字母均满足要求
  • 我的思路
    • 无思路
  • 视频讲解关键点总结
    • 本题两个关键点写在了考点里
    • 一,先遍历一遍字符串,记录每个字符出现的最后位置的索引
    • 二,在循环遍历字符串的过程中,用一个变量记录遍历过的字符所对应的索引最大值,当当前索引和最大值吻合时,记录一次结果
  • 我的思路的问题
    • 无思路
  • 代码书写问题
  • 可执行代码
class Solution:def partitionLabels(self, s: str) -> List[int]:last_position = [0] * 26for i in range(len(s)):last_position[ord(s[i]) - ord('a')] = iresult = []start_index = 0end_index = 0for i in range(len(s)):end_index = max(end_index, last_position[ord(s[i]) - ord('a')])if i == end_index:result.append(i - start_index + 1)start_index = end_index + 1end_index = 0return result

*56. 合并区间

https://programmercarl.com/0056.%E5%90%88%E5%B9%B6%E5%8C%BA%E9%97%B4.html

  • 考点
    • 贪心算法
    • 重叠区间
  • 我的思路
    • 如果区间有重叠,将区间合并,知道当前区间和下一区间不重叠,将当前区间加入结果
  • 视频讲解关键点总结
    • 先将第一个区间加入结果列表中
    • 之后判断原列表的当前区间与结果列表的最后一个区间是否重叠,如果重叠,更新结果列表的最后一个区间
    • 如果不重叠,直接把当前区间加入结果列表
  • 我的思路的问题
    • 会遗漏最后一个区间
  • 代码书写问题
  • 可执行代码
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key=lambda x: x[0])result = [intervals[0]]for i in range(1, len(intervals)):if result[-1][1] >= intervals[i][0]:result[-1][0] = min(intervals[i][0], result[-1][0])result[-1][1] = max(intervals[i][1], result[-1][1])else:result.append(intervals[i])return result
http://www.lryc.cn/news/310919.html

相关文章:

  • 2024《》
  • 【Web】Java反序列化之从CC3看TemplatesImpl的利用
  • 【Elasticsearch索引】Recovery恢复索引
  • 如何在 Linux 中快速清空文件而不删除它们?
  • SpringBoot 配置文件${variable:default}用法
  • CUDA学习笔记02:测试程序hello world
  • 2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题
  • 项目部署发布
  • MATLAB环境下基于离散小波变换的心电信号伪影去除及PQRST波检测
  • SwiftUI 在 App 中弹出全局消息横幅(下)
  • 2023年06月CCF-GESP编程能力等级认证Scratch图形化编程三级真题解析
  • 升级openssl
  • 软考基础知识2
  • Python基本数据类型介绍
  • 边缘计算网关:连接物理世界与数字世界的桥梁-天拓四方
  • NTP网络校时服务器(GPS北斗卫星校时系统)应用场景
  • Intel 芯片 Mac 如何重新安装系统
  • 【uni-app】condition 启动模式配置,生产环境无效,仅开发期间生效
  • sql单表运用11.3
  • YOLOv5目标检测学习(1):yolo系列算法的基础概念
  • 【大数据】通过 docker-compose 快速部署 MinIO 保姆级教程
  • VMware 虚拟机安装windows 10操作系统
  • Mysql实战(2)之MySQL执行流程
  • ES6 | (二)ES6 新特性(下) | 尚硅谷Web前端ES6教程
  • 客户案例|用友NC财务系统上云
  • OceanPen Art AI绘画系统内容讲解
  • 类 Unix 系统的文件目录结构
  • 外部存储器接口(EMIF)
  • 华为认证HCIP报名条件有哪些?考试要求介绍
  • 【Python】变量的引用