56. Merge Intervals

https://leetcode.com/problems/merge-intervals/

solution

  • 根据起点或终点排序, 根据上一个终点和这一个起点的关系判断有无overlap

  • 注意循环的控制方式,尤其是用输入list和输出list进行比较

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals = sorted(intervals, key=lambda x: x[0])
        res = []

        for i in intervals:
            if res and i[0] <= res[-1][1]:
                res[-1][1] = max(i[1], res[-1][1])
            else:
                res.append(i)
        return res

时间复杂度:O(nlogn) 空间复杂度:O(n)

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

follow up - 间隔类题目

57. Insert Interval

435. Non-overlapping Intervals

  • 和上题思路一样,排序后如果发现有重叠,那么按照贪心把重叠中更长的项删除

时间复杂度:O() 空间复杂度:O()

时间复杂度:O() 空间复杂度:O()

*252. Meeting Rooms

时间复杂度:O() 空间复杂度:O()

1288. Remove Covered Intervals

时间复杂度:O(sort) 空间复杂度:O(1)

*253. Meeting Rooms II

759 Employee Free Time

452. Minimum Number of Arrows to Burst Balloons

1094. Car Pooling

986. Interval List Intersections

时间复杂度:O(n) 空间复杂度:O(n)

Last updated