合并区间
拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路
class Interval:
def __init__(self, a=0, b=0):
self.start = a
self.end = b
class Solution:
def merge(self, intervals: list[Interval]) -> list[Interval]:
result: list[Interval] = []
intervals.sort(key=lambda x: x.start)
for interval in intervals:
if not result or result[-1].end < interval.start:
result.append(interval)
else:
result[-1].end = max(result[-1].end, interval.end)
return result
if __name__ == '__main__':
intervals = [Interval(1, 3), Interval(2, 6), Interval(8, 10), Interval(15, 18)]
result = Solution().merge(intervals)
for interval in result:
print(interval.start, interval.end)
# 1 6
# 8 10
# 15 18
好比一个人遍历一个列表,该列表中存放的是区间对象,首先将列表中的对象按 start 字段排序,然后
-
当以下两种情况,正常加入 result 即可
- 刚开始第一个
- 或者已加入的最后一个 end 小于当前区间对象的 start,说明没有交错
-
否则说明交错了,则合并,即将已加入的最后一个 end 修改为较大的那一个 end