56.合并区间

·题目描述

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

 

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

·解题思路

1.先对数组进行排序

2.先判断头两个数组是否可以合并,若是可以合并则直接将合并的结果加入到result数组中;若是不能合并,那么就将两个数组都加入到result数组中

3.进入循环,每次判断获取的数组是否可以和resul最后一个元素合并,若是可以合并,则先弹出数组的末尾元素,然后再添加合并后的结果

4.若是获取的数组不能和result末尾数组合并,那么就直接将获取的数组添加到result中

·代码


class Solution(object):
    def merge(self, intervals):
        intervals.sort()
        n = len(intervals)
        result = []
        res = intervals[0]

        if n == 1:
            return intervals

        if intervals[1][0] <= res[1]:
            left = min(res[0],intervals[1][0])
            right = max(res[1],intervals[1][1])
            res = [left,right]
            result.append(res)
        else:
            result.append(intervals[0])
            result.append(intervals[1])

        for i in range(2,n):
            if result[len(result)-1][0]<= intervals[i][0] <= result[len(result)-1][1] :
                left = min(result[len(result)-1][0],intervals[i][0])
                right = max(result[len(result)-1][1],intervals[i][1])
                res = [left,right]
                result.pop(-1)
                result.append(res)

            else:
                result.append(intervals[i])
        return result

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值