python之Merge Intervals

这题先排序,按照start,end排序之后再开始进行运算。在一个栈里每次比较2个元素,无覆盖则大的继续比较,小的进入结果,有覆盖则继续比较。一直比较完得到答案。代码如下:
# Definition for an interval.
# class Interval(object):
#     def __init__(self, s=0, e=0):
#         self.start = s
#         self.end = e

class Solution(object):
    def merge(self, intervals):
        """
        :type intervals: List[Interval]
        :rtype: List[Interval]
        """
        if not intervals:
            return intervals
        if len(intervals) == 1:
            return intervals
        intervals.sort(key = lambda x:(x.start, x.end), reverse = 1)
        def compare(x):
            if x[0].end < x[1].start:
                return x, 0
            else:
                return Interval(x[0].start, max(x[1].end, x[0].end)), 1
        list1 = [intervals[-1], intervals[-2]]
        list2 = []
        intervals.pop()
        intervals.pop()
        while intervals != []:
            a, b = compare(list1)
            if b == 0:
                list2.append(a[0])
                list1 = [a[-1]]
                c = intervals.pop()
                list1.append(c)
            else:
                list1 = []
                list1.append(a)
                c = intervals.pop()
                list1.append(c)
        a, b = compare(list1)
        if b == 0:
            list2 = list2 + a
        else:
            list2.append(a)
        return list2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值