leetcode每日一题 python解法 4月16日

难度:中等

题目内容:

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

题解:

首先头疼的问题就是如果区间随意排放就很难搞
所以先按左端点排个序
然后从左向右挨个合并就好啦


image.png
class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        if len(intervals) == 0:
            return []
        intervals.sort(key = lambda x: x[0])# 排序
        lastsec = intervals[0][:]
        i = 1
        
        while i<= len(intervals) - 1:
            #print(lastsec,intervals)
            if lastsec[0] <= intervals[i][0] and lastsec[1] >= intervals[i][0]:
                lastsec = self.me(lastsec,intervals[i])
                intervals[i-1] = lastsec[:]
                intervals.pop(i)
            else:
                lastsec = intervals[i]
                i += 1
        return intervals

    def me(self,l1,l2):
        if l1[0]<= l2[0] and l1[1] >= l2[1]:
            return l1
        elif l1[0]<= l2[0] and l1[1] < l2[1]:
            return [l1[0],l2[1]]
        elif l2[0]<= l1[0] and l2[1] < l1[1]:
            return l2
        elif l2[0]<= l1[0] and l2[1] < l1[1]:
            return [l2[0],l1[1]]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容