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

LeetCode56合并区间

本文基于各个大佬的文章

上点关注下点赞,明天一定更灿烂!


前言

        Python基础好像会了又好像没会,所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考,写给自己看的,也欢迎大家在评论区指导~

        您的每一条评论都会让我更有学习的动力。


一、分析题目

题目的意思倒是挺好懂得,执行起来感觉会稍微麻烦一点点。

二、思路以及代码

思路:问题的核心是如何判断两个区间是否重叠,然后将重叠的区间合并。其余为重叠区间直接输出。

假设每个区间都是[start,end]形式,那么我们首先对start进行排序,从小到大。

然后比较start1与start2,(因为已经排序了,所有能保证start1<start2)

        若(end1>=start2)那说明两个区间重叠,则需要合并,合并的时候start取start1,end取两个中较大的

        若(end1<start2)则说明不重叠

转换成代码我们看一下,这个题目我让deep哥帮我写了超级详细的注释

class Solution:#List[List[int]]:一个包含 另一个列表 的列表,而这个内部的列表又包含整数def merge(self, intervals: List[List[int]]) -> List[List[int]]:# 检查输入的 intervals 列表是否为空if not intervals:return []# 排序:按照区间的起始点升序排序 sort() 方法会直接修改列表本身,而不是创建一个新列表。# key=lambda interval: interval[0] 是一个关键。# lambda interval: interval[0] 是一个匿名函数(lambda 函数)。# 它接收一个参数 interval(代表 intervals 列表中的一个元素,即一个区间 `[start, end]`)# 它返回 interval[0],也就是这个区间的起始点。intervals.sort(key=lambda interval: interval[0])# 示例:如果 intervals 是 [[1,3],[8,10],[2,6],[15,18]]# 排序后会变成 [[1,3],[2,6],[8,10],[15,18]]# 初始化结果列表,并将第一个区间放入merged_intervals = []merged_intervals.append(intervals[0])# 迭代合并 遍历从第二个区间开始(索引为 1)到最后一个区间的所有区间。for i in range(1, len(intervals)):# 获取当前正在处理的(来自原始已排序列表)的区间。current_interval = intervals[i]# 获取 merged_intervals 列表中的最后一个已合并的区间。# 最后一个已合并的区间是与当前考虑的区间最有可能发生重叠的区间。last_merged_interval = merged_intervals[-1]# 检查重叠 #如果当前区间的开始点小于或等于上一个合并区间的结束点,这就意味着这两个区间重叠if current_interval[0] <= last_merged_interval[1]:# 重叠:合并区间。# 新区间的起始点就是 already established 的 last_merged_interval[0] (因为已经排序)。# 新区间的结束点应该是两个区间结束点中的较大者。last_merged_interval[1] = max(last_merged_interval[1], current_interval[1])else:# 不重叠:将当前区间作为一个新的独立区间添加到结果列表中merged_intervals.append(current_interval)# 返回结果return merged_intervals

三、本题收获

sort函数非常强大,在这个题目里面,我们按照intervals列表中列表的第一个数从小到大进行了排序。

intervals = [[1,3], [8,10], [2,6], [15,18]]
for interval in intervals:print(f"元素: {interval}, 排序关键字: {interval[0]}")

输出:

元素: [1,3], 排序关键字: 1

元素: [8,10], 排序关键字: 8

元素: [2,6], 排序关键字: 2

元素: [15,18], 排序关键字: 15

lambda表达式是 Python 中创建 小型、一次性函数 的一种简洁方式。它们也被称为 匿名函数,因为它们不需要使用 def关键字来定义,也没有函数名。

lambda arguments: expression"""
lambda : 关键字,表明这是一个 lambda 表达式。
arguments : 参数列表,可以有一个或多个,用逗号分隔(也可是空的)。
: : 分隔参数和表达式。
expression : 一个表达式,它的值将是 lambda 函数的返回值。Lambda 函数只能包含一个表达式。
"""#与sort结合
pairs = [(1, 'b'), (3, 'a'), (2, 'c')]
pairs.sort(key=lambda item: item[1]) # 根据元组的第二个元素排序
print(pairs) # 输出: [(3, 'a'), (1, 'b'), (2, 'c')]

总结

        只会打暴力,基础一团糟,明天再学吧老铁,别真学会了。

http://www.xdnf.cn/news/1349713.html

相关文章:

  • Idea中 lombok 在“测试类中-单元测试”运行失败及解决方法
  • 商超高峰客流统计误差↓75%!陌讯多模态融合算法在智慧零售的实战解析
  • Elasticsearch:什么是神经网络?
  • Elasticsearch Persistence(elasticsearch-persistence)仓储模式实战
  • 批量归一化:不将参数上传到中心服务器,那服务器怎么进行聚合?
  • 浏览器解析网址的过程
  • 倍福下的EC-A10020-P2-24电机调试说明
  • 【JVM】JVM的内存结构是怎样的?
  • mysql为什么使用b+树不使用红黑树
  • Elasticsearch Ruby 客户端 Bulk Scroll Helpers 实战指南
  • TopK问题(堆排序)-- go
  • MySQL存储过程入门
  • 中农具身导航赋能智慧农业!AgriVLN:农业机器人的视觉语言导航
  • PostgreSQL15——查询详解
  • Python 十进制转二进制
  • 【每天一个知识点】AIOps 与自动化管理
  • 使用隧道(Tunnel)连接PostgreSQL数据库(解决防火墙问题)(含Java实现代码)
  • AI实验管理神器:WandB全功能解析
  • 【文献阅读】Advances and Challenges in Large Model Compression: A Survey
  • `strncasecmp` 字符串比较函数
  • Unreal Engine IWYU Include What You Use
  • Vue 插槽(Slots)全解析2
  • ubuntu - 终端工具 KConsole安装
  • AI + 教育:个性化学习如何落地?教师角色转变与技术伦理的双重考验
  • SymPy 中抽象函数的推导与具体函数代入
  • Spring Ai 1.0.1中存在的问题:使用MessageChatMemoryAdvisor导致System未被正确的放在首位
  • c++最新进展
  • fdisk工具源码编译生成
  • DAY14-新世纪DL(DeepLearning/深度学习)战士:破(优化算法)2
  • 多线程下为什么用ConcurrentHashMap而不是HashMap