区间问题

发布时间 2023-09-07 11:29:19作者: LARRY1024

应用

应用1:Leetcode.56

题目

算法步骤:

  • 先将时间段按照起始时间升序,结束时间降序排序

  • \(results\) 保存合并后的结果,并保存所有时间段中的第一个,并以其作为基准;

  • 遍历所有的时间段:

    • 如果当前区间的起始时间小于等于,\(results\) 中最后一个区间的结束时间,则更新其结束时间(做合并操作);

    • 否则,就保持当前时间段作为结果。

代码实现

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        # 将时间段按照起始时间升序,结束时间降序排序
        intervals.sort(key = lambda x : (x[0], -x[1]))
        # 保存合并后的结果
        results = list()
        # 以第一个时间段作为基准
        results.append(intervals[0])
        for interval in intervals[1:]:
            # 当前区间的起始时间小于等于,上一个合并后的区间的结束时间,则更新其结束时间
            if interval[0] <= results[-1][1]:
                results[-1][1] = max(results[-1][1], interval[1])
            # 否则就直接保存该时间段
            else:
                results.append(interval)
        return results