56. Merge Intervals

56Merge Intervals

题目描述

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

将有重合部分的区间合并。

分析

先将给定的区间按照区间的start参数从小到大排序; 比较相邻区间前者的end和后者的start,若有重合,则合并两个区间:前者的end改为后者的end,删除靠后的区间,给定的区间总个数减1,避免循环体中索引超出范围。

   1. sort与sorted:

            sort()函数只针对list对象排序,且直接修改原始列表;若指定排序依赖的参数/函数,则按照要求进行排序。

            sorted()对所有可迭代对象进行排序,对list排序后会生成新的list。

    2.  sort与lambda的结合使用:

            key指定sort排序时依照的键值,此时可以使用lambda指定key

            intervals.sort(key=lambda x: x.start)

    3. lambda 的其他用法:

            lambda是python将函数赋值给变量的一个操作符。

            map(function, iterable, ...)使用函数function,对iterable进行操作;

          eg: map(lambda x: x**2, [1,2,3]); 结果为:[1,4,9]

            reduce(function,iterable,...)对迭代对象使用function运算,并且将结果累积。取出iterable第一、二个元素使用function运算之后,将结果与第三个元素进行运算;如此类推,直到全部元素运算结束。

          eg: reduce(lambda x,y: x+y, [1,2,3,4,5]); 结果为:1+2+3+4+5=15

答案

# 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]
        """
        n=len(intervals)
        intervals.sort(key=lambda x: x.start)   #对所有元组按照开始时间从小到大排序
        i=1
        while i<n:  #循环体限制条件
            if intervals[i-1].end>=intervals[i].start:  #判断是否存在重合
                intervals[i-1].end=max(intervals[i-1].end,intervals[i].end)
                del intervals[i]    #或者intervals.remove(intervals[i])
                n-=1
            else:   #若该层循环中未删除元组,则索引后移
                i+=1
        return intervals
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值