算法:合并间隔56. Merge Intervals

# 56. Merge Intervals
Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.

Example 1:

Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].

Example 2:

Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.

Constraints:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

1. 根据第一个数字排序后合并

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key=lambda x: x[0])
        res = []
        for item in intervals:
            if not res or res[-1][1] < item[0]:
                res.append(item)
            else:
                res[-1][1] = max(res[-1][1], item[1])
        
        return res

1.1 解释代码intervals.sort(key=lambda x: x[0])

这段代码使用了Python中的sort()方法对列表intervals进行排序,排序的依据是每个子列表的第一个元素。
具体解释如下:

  • intervals是一个包含多个子列表的列表,每个子列表代表一个区间,其中每个子列表的第一个元素表示区间的起始位置。
  • sort()方法用于对列表进行排序,其中的key参数是一个函数或lambda表达式,用于指定排序的依据。
  • 在这段代码中,使用了lambda表达式lambda x: x[0]作为key参数,它表示对每个子列表x按照第一个元素进行排序。
  • 执行这段代码后,intervals列表将按照子列表的第一个元素从小到大进行排序。
    举个例子,假设intervals列表如下:
intervals = [[3, 5], [1, 2], [4, 6], [2, 4]]

经过排序后,intervals列表会变为:

[[1, 2], [2, 4], [3, 5], [4, 6]]

排序后的列表按照子列表的第一个元素从小到大排列。这种排序可以用于根据区间的起始位置对区间进行排序,以便进一步处理或分析。

1.2 详细解释 lambda表达式

lambda表达式是一种匿名函数的简写形式,它允许我们在代码中创建小型的、一次性的函数,无需显式地定义函数名称。
lambda表达式的基本语法如下:

lambda arguments: expression

其中:

  1. lambda是关键字,表示定义lambda表达式。
  2. arguments是参数列表,可以是零个或多个参数,用逗号分隔。
  3. expression是一个表达式,描述了lambda函数的返回值。

lambda表达式的特点和用法如下:

  1.  匿名性:lambda表达式是匿名的,即没有显式指定函数名称,因此通常用于一些简单的、无需重复使用的函数场景。
    
  2.  简洁性:lambda表达式使用简洁的语法,可以在一行代码中定义一个函数。
    
  3.  一次性使用:由于lambda表达式没有函数名称,它通常用于需要在代码中临时定义和使用函数的场景,不会在其他地方重复调用。
    
  4.  返回值:lambda表达式的返回值由表达式部分决定,可以是单个值、表达式结果、函数调用结果等。
    
  5.  可调用性:lambda表达式可以像普通函数一样被调用,通过提供参数来执行表达式,并返回结果。
    
  6.  应用范围:lambda表达式通常用于函数式编程、排序、过滤、映射等操作,以及作为高阶函数的参数。
    

下面是一个使用lambda表达式的例子:

add = lambda x, y: x + y 
result = add(2, 3) 
print(result) # Output: 5

在这个例子中,lambda表达式lambda x, y: x + y定义了一个简单的加法函数,将两个参数相加并返回结果。然后,我们使用add(2, 3)调用lambda函数,得到结果5,并将其打印输出。
Lambda表达式在需要简单、临时的函数定义时非常有用,可以减少代码的复杂性和冗余,提高可读性和编写效率。

猜你喜欢

转载自blog.csdn.net/zgpeace/article/details/131777016