LeetCode之合并区间

本文分享了在LeetCode上解决“合并区间”问题的两种方法。首先介绍了使用暴力法解决该问题的步骤,然后提出了一种更高效的解决方案,通过先排序再遍历的方式简化合并过程,显著提升了程序效率。

今天在LeetCode上面做了一道排序题:合并区间。该题也不算太难,先用非常暴力的方法解决了。该步骤如下:
1.初始化每一个区间的最小值min与最大值max
2.遍历所有区间,找到区间下限最小的那个,并用min,max记入。
3.删除步骤2找到的区间
4.遍历剩下的所有区间,如果该区间的最小值小于或等于步骤2中的最大值,记入该区间的最大值。
5.如果该区间的最大值大于max,那么max 就等于该最大值。
6.重复步骤4,5若干次,并在结束后删除所有符合步骤4的区间,添加【min,max】为合并后的区间
7.但剩下的区间数大于零时,重复操作上述过程

 def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        lists = []
        while (len(intervals)>0):
            min = 100000
            index = 0
            for a in range(len(intervals)):
                if min> intervals[a][0]:
                    min = intervals[a][0] 
                    max = intervals[a][1]
                    index = a 
            intervals.remove(intervals[index])
            n = 10
            while(n):
                re = []
                for a in range(len(intervals)):
                    if max >= intervals[a][0]:
                        if max <= intervals[a][1]:
                            max = intervals[a][1]
                        re.append(intervals[a])
                n -= 1
                intervals = [a for a in intervals if a not in re]
            lists.append([min,max])
        return lists
        

上述操作没有涉及的如何算法的思想,下面让我们在用另外一种操作,先按区间的最小值排好序,然后再遍历。排序后可以合并的区间是连续的,这样就省去了上面的步骤6的重复操作4,5,从而提高了程序的效率。
具体步骤就不写了,基本与上面的相似。

 def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key=lambda x: x[0])
        merges = []
        for a in intervals:
            if not merges or merges[-1][-1] < a[0]:
                merges.append(a)
            else:
                if merges[-1][-1] < a[-1]:
                    merges[-1][-1] = a[-1]
        return merges

Thank for your time !! ,

ps: 参考LeetCode官方解析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FPGA之旅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值