Leetcode刷题记录——56. 合并区间

Leetcode刷题记录——56. 合并区间_第1张图片
算是贪心算法吧
建立一个用于存储结构的res = []
我们首先按每个子区间的最小值将所有list排序,并将第0个list扔进res
此后,我们对于排序后的第i个list(i>=1),和当前res中的最后一个进行比较
比较的结果无非有2种:
包含或部分重叠,此时返回二者合并后的区间
不相交,返回空
若为第一行的情况,我们返回二者合并后的区间并替换掉到res中的最后一个
若为第二行的情况,我们返回空,并将这个list注入到res后方

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        length = len(intervals)
        if length <= 1:
            return intervals
        res = []
        intervals = sorted(intervals,key=lambda x:x[0])
        #两个区间的几种可能
        #包含,此时保留更大的
        #部分重叠,此时合并为更大的
        #不相交,返回空
        res = [intervals[0]]#里面的listm
        for i in range(1,length):
            thislist = intervals[i] 
            find = False
            templist = self.judge(thislist,res[-1])
            if templist != []:
                thislist = templist
                res[-1] = templist
            else:
                res.append(thislist)
        return res
                

    def judge(self,l1,l2):
        m1 = l1[0]
        M1 = l1[1]
        m2 = l2[0]
        M2 = l2[1]
        if M2 < m1 or M1 < m2:
            return []
        else:
            return [min(m1,m2),max(M1,M2)]

你可能感兴趣的:(leetcode,python编程技巧)