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')]
总结
只会打暴力,基础一团糟,明天再学吧老铁,别真学会了。