LeetCode56-合并区间

昨天晚上老周在初中同学群里大手一挥

发了一条消息

顿时群里炸开了锅

老周的文采依旧没减

瞬间带回了初中老周给我们批改日记的岁月

时间,这操蛋的玩意儿!


给出一个区间的集合,请合并所有重叠的区间。

示例 1:

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

示例 2:

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

思路:

这一题的思路其实也是很简单:

  1. 先把给定大区间里面的小区间里第一个数字按从小到大顺序排序得到一个新的大区间
  2. 得到新的大区间后,就可以将里面的小区间从左到右依次合并了。符合要求的就可以合并,不符合要求的直接单独成一区间。

大致过程如下图所示,方便大家理解:

 

代码如下:

class Solution:
    def merge(self, intervals):
        """
        :type intervals: List[Interval]
        :rtype: List[Interval]
        """
        intervals_to_list = []
        if len(interval_list) == 0:
            return intervals_to_list
        # 首先将intervals链表数组中链表的值转换成数组里的值,方便后续操作
        for index in intervals:
            interval = [index.start, index.end]
            intervals_to_list.append(interval)
        # 将intervals_to_list数组按照对应intervals中每一个链表对应的start值的大小重新排列,方便后续合并区间
        intervals_to_list.sort()
        if len(intervals_to_list) == 0:
            return []
        start, end = intervals_to_list[0]
        final_list = []
        # 这一步就是主要的合并区间过程了
        for index in intervals_to_list:
            if start <= index[0] <= end:
                start = min(start, index[0])
                end = max(end, index[1])
            else:
                final_list.append([start, end])
                start, end = index
        final_list.append([start, end])
        final_intervals = []
        # 得到合并之后的数组之后,还得将其转换成链表格式表示
        for indice in final_list:
            interval = Interval()
            interval.start = indice[0]
            interval.end = indice[1]
            final_intervals.append(interval)
        return final_intervals


if __name__ == "__main__":
    interval_list = []
    merge_list = [[-1, 5], [8, 14], [3, 5]]
    for index in merge_list:
        interval = Interval()
        interval.start = index[0]
        interval.end = index[1]
        interval_list.append(interval)
    final_list = Solution().merge(interval_list)
    print(final_list)

执行效率在70%左右。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习的学习者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值