LeetCode Medium 56 合并间隔 Python

75 篇文章 0 订阅
72 篇文章 0 订阅
def merge(self, intervals):
    """
    算法:先排序,再merge
    MD,坑爹,interval居然是个对象,而不是题目中给出的样例那样的[1,2][3,4]?????
    然后就很好做了,根据interval.start进行排序,然后result的top做判断是否要进行合并,合并的条件是
    interval.left <= last_interval.end,因为已经根据start排过序了,所以只要判断这一个地方就oK

    """
    if intervals == []:
        return []
    intervals.sort(key=lambda x: x.start)
    result = []
    for interval in intervals:
        if result == []:
            result.append(interval)
            continue
        else:
            last_interval = result[-1]
            if interval.start <= last_interval.end:
                interval.start = min(interval.start, last_interval.start)
                interval.end = max(interval.end, last_interval.end)
                result.pop()
            result.append(interval)
    return result

def merge1(self, intervals):
    """

    Solution的写法,更加简洁
    """
    intervals.sort(key=lambda x: x.start)

    merged = []
    for interval in intervals:
        # if the list of merged intervals is empty or if the current
        # interval does not overlap with the previous, simply append it.
        if not merged or merged[-1].end < interval.start:
            merged.append(interval)
        else:
        # otherwise, there is overlap, so we merge the current and previous
        # intervals.
            merged[-1].end = max(merged[-1].end, interval.end)

    return merged

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值