python之Merge Intervals

来源:互联网 发布:华东理工大学网络教育 编辑:程序博客网 时间:2024/06/14 20:08
这题先排序,按照start,end排序之后再开始进行运算。在一个栈里每次比较2个元素,无覆盖则大的继续比较,小的进入结果,有覆盖则继续比较。一直比较完得到答案。代码如下:
# Definition for an interval.# class Interval(object):#     def __init__(self, s=0, e=0):#         self.start = s#         self.end = eclass 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

0 0
原创粉丝点击