56.合并区间

该博客是一道LeetCode题解,解题需对intervals按第一列排序。先尝试冒泡排序超时,换希尔排序通过但复杂度大,后参考官方用内置函数intervals.sort(key=lambda x: x[0])排序。还提及取区间有其他解释但未关注。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

题解:

按照题意整就好了,值得注意的是 intervals 要按照第一列进行排序。8个排序方法中,先用冒泡进行尝试,果然超时,换成希尔排序后:

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        l = len(intervals)
        re = []
        i =0 
        def shell_sort(slist):
            gap = len(slist)
            while gap > 1:
                gap = gap // 2
                for i in range(gap, len(slist)):
                    for j in range(i % gap, i, gap):
                        if slist[i][0] < slist[j][0]:
                            slist[i][0], slist[j][0] = slist[j][0], slist[i][0]
                            slist[i][1], slist[j][1] = slist[j][1], slist[i][1]
            return slist
        
        intervals = shell_sort(intervals)
        
        #print("intervals",intervals)
        t1,t2 = intervals[0][0],intervals[0][1]
        for i in range(1,len(intervals)):
            print(t1,t2,intervals[i][0],intervals[i][1])
            if t1<=intervals[i][0]<=t2:
                t2 = max(t2,intervals[i][1])
            else:
                re.append([t1,t2])
                t1,t2 = intervals[i][0],intervals[i][1]
        re.append([t1,t2])
        #print(re)
        return re

虽然过了,但是这个时间复杂度就有点大了

看了看官方,在排序的时候换成 intervals.sort(key=lambda x: x[0]),调用内置函数。

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        l = len(intervals)
        re = []
        i =0 
        
        intervals.sort(key=lambda x: x[0])
        #print("intervals",intervals)
        t1,t2 = intervals[0][0],intervals[0][1]
        for i in range(1,len(intervals)):
            print(t1,t2,intervals[i][0],intervals[i][1])
            if t1<=intervals[i][0]<=t2:
                t2 = max(t2,intervals[i][1])
            else:
                re.append([t1,t2])
                t1,t2 = intervals[i][0],intervals[i][1]
        re.append([t1,t2])
        #print(re)
        return re

好的,关于取区间,它有另外的解释,但是,我不听耶。

官方的代码后,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值