LeetCode #56 Merge Intervals

题目

Merge Intervals


解题方法

由于有前置条件

intervals[i][0] <= intervals[i][1]

所以可以想到通过intervals.sort()增加一个前置条件:

intervals[i][0] <= intervals[i+1][0], 0 <= i < len(intervals)-1

这样一来就把所有左端都排序好了,从头开始遍历数组时,只需要考虑右端的大小关系,选择max设置为新的右端即可实现合并。

值得注意的是list.sort()方法可以实现嵌套列表的排序,默认是按照所有嵌套列表的第一位大小关系排序,可以利用匿名函数实现按照第二位、第三位...等进行排序,如

intervals.sort(key=lambda x: x[2])

代码

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort()
        i = 0
        while i < len(intervals) - 1:
            if intervals[i+1][0] <= intervals[i][1]:
                left = intervals[i][0]
                right = max(intervals[i][1], intervals[i+1][1])
                intervals.pop(i)
                intervals[i][0] = left
                intervals[i][1] = right
            else:
                i += 1
        return intervals
posted @ 2020-10-14 09:00  老鼠司令  阅读(55)  评论(0)    收藏  举报