题解 | #合并区间#
合并区间
http://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
class Interval:
def init(self, a=0, b=0):
self.start = a
self.end = b
代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
@param intervals Interval类一维数组
@return Interval类一维数组
# write code here
def merge(self , intervals: List[Interval]) -> List[Interval]:
#intervals[0].start或end
if not intervals:
return []
#按照区间左边的值进行升序排列
intervals = sorted(intervals, key = lambda interval: interval.start)
out = [] #用于存储合并直接的区间结果
#将第一个区间放入out
out.append(intervals[0])
#遍历
for i in range(1,len(intervals)):
last = out[-1]#永远用out的最后一个区间,因为之前的都有序了
#把当前遍历到的区间取左右边界
cur_left, cur_right = intervals[i].start, intervals[i].end
#如果没有重合,把这个区间加入out
if last.end < cur_left:
out.append(intervals[i])
#重合了,比较谁的右边界大,取大的作为合并的区间的右边界
else:
last.end = max(last.end,cur_right)
return out