LeetCode 56 Merge Intervals(Python实现及详解)

【题目】

 

Given a collection of intervals, merge all overlappingintervals.

 

For example,

Given [1,3],[2,6],[8,10],[15,18],

return [1,6],[8,10],[15,18].

输入一个区间的list,返回一个list(合并了所有有重叠的区间之后的list)。

【思路】

(1)先将目标区间数组按X轴从小到大排序。例如:[2,3] [1,2] [6,9] ->[1,2] [2,3] [6,9]

(2)扫描排序后的目标区间数组,将这些区间合并成若干个互不相交的区间。例如 [2,3] [1,2] [6,9] ->[1,3] [6,9]

这里分三种情况:

l  [1,3] [2,6]  ->[1,6]  第一个区间的end大于等于第二个区间的start,同时第二个区间的end大于第一个区间的end

l   [2,8] [3,5] ->[2,8]  第一个区间的end大于等于第二个区间的start,同时第二个区间的end小于第一个区间的end

l  [1,2] [3,4] -> [1,2] [3,4] 第一个区间的end小于第二个区间的start 

【Python代码】

# 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]

       """

       intervals.sort(key = lambda x: x.start)#对于interval按照start排序

       res = []

       length1 = len(intervals)

       for i in range(length1):

           if res == []:

                res.append(intervals[i])

           else:

                length2 = len(res)

                if res[length2-1].start <=intervals[i].start <= res[length2 -1].end:

#如果正在插入的数据的开始值大于前一数据的起始值并小于其end

                    res[length2-1].end =max(intervals[i].end,res[length2 -1].end)

                else:

                    res.append(intervals[i])

       for i in range(length2):

           print("[%d, %d]"%(res[i].start, res[i].end))

        return res

      

if __name__ == '__main__':

    s= Solution()

   i1 = Interval(1,3)

   i2 = Interval(8,10)

   i3 = Interval(2,6)

   i4 = Interval(15,18)

   intervals = [i1,i2,i3,i4]

   res = s.merge(intervals)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值