题解 | #合并区间#

合并区间

https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a

from functools import cmp_to_key
# 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]:
        if len(intervals) == 0:
            return intervals

		# 排序
        intervals.sort(key=cmp_to_key(lambda a,b:a.start-b.start))
        res = []
        res.append(intervals[0])

        for i in range(len(intervals)):
            if intervals[i].start <= res[-1].end: # 说明有重叠
                res[-1].end = max(res[-1].end, intervals[i].end) # 合并区间
            else:
                res.append(intervals[i])

        return res

解题思路

  • 先判断特殊情况;
  • 排序;
  • 循环遍历,判断是否有重叠,如果有重叠,则更新res最后一个元素的end值;否则,直接加入到res中。

复杂度

  • 时间复杂度为O(nlogn);
  • 空间复杂度为O(1)。
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务