区间问题
应用
应用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