[LeetCode]56.合并区间(python)

1.代码

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        result = []
        for item1 in intervals:
            flag = False
            save = []
            for item2 in result:
                if(if_overlap(item1,item2)):
                    flag = True
                    save.append(item2)
            if(flag):
                newitem = []
                left = item1[0]
                for i in save:
                    if(i[0]<left):
                        left = i[0]
                right = item1[1]
                for i in save:
                    if(i[1]>right):
                        right = i[1]
                newitem.append(left)
                newitem.append(right)
                for i in save:
                    del result[result.index(i)]
                result.append(newitem)
            else:
                result.append(item1)
        return result
            
def if_overlap(list1:List[int],list2:List[int]) -> bool:
    if(list1[1]<list2[0]):
        return False
    if(list1[0]>list2[1]):
        return False
    return True

2.思路

构造一个List[List[int]]的result列表来记录合并区间的结果,对于intervals中的每个区间,判断它是否与result中已有的区间重叠,如果没有重叠,就直接把当前区间加入result,如果有重叠,就把所有重叠的小区间合成一个大区间,在result中删除这些小区间并加入大区间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值