您的位置:首页 > 编程语言 > Python开发

python之Merge Intervals

2016-01-02 22:23 681 查看
这题先排序,按照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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息