python每日一题 今天的每日一题就更新到这里

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

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

先上我写的第一版代码 大家看看有什么问题

class Solution(object):
    def merge(self, intervals):
        intervals.sort(key=lambda x: x[0])#将每个组合进行排序 然后进行组合
        for i in range(len(intervals)-1,0,-1):
            if intervals[i][0]<=intervals[i-1][1]:
                intervals[i-1][1]=intervals[i][1]
                del intervals[i]
        return intervals
solution=Solution()
result=solution.merge([[1,3],[2,6],[8,10],[15,18]])
print(result)

首先是没有解决覆盖问题 比如 [1,4] [2,3]然后就是 如果输入是下面的数列 其实应该是[1,10]但是输出结果不是

[[2,3],[4,5],[6,7],[8,9],[1,10]]

那么是哪里出了问题呢?当排序之后1.10会在最前面 这个顺序如果是从后往前的 那么1 10会在最后才遍历到 也改变不了之后的结果 所以这个遍历我之前想的是从后遍历不会导致越界 那么其实这个方法是不可行的 然后我又写了一个正序的 这个还是不行有问题  对于I的改变是不对的 其实是如果合并成功了 那么I是不发生移动的 因为万一下一个也是可以的 但是如果没办法合并 那么I才可以移动 所以这个i+=1和if那部分应该是else的关系

class Solution(object):
    def merge(self, intervals):
        intervals.sort(key=lambda x: x[0])#将每个组合进行排序 然后进行组合
        i=0
        while i<len(intervals)-1:
            if (intervals[i+1][0]<=intervals[i][1]) and (intervals[i+1][0]>=intervals[i][0]):
                intervals[i][1]=max(intervals[i][1],intervals[i-1][1])
                del intervals[i+1]
             i+=1
        return intervals
solution=Solution()
result=solution.merge([[1,3],[2,6],[8,10],[15,18]])
print(result)

这个是最终正确的代码 其中红色的部分其实我本来是没有这一步的 也是可以顺利通过 但是感觉加上看着更好看点 就加上了

class Solution(object):
    def merge(self, intervals):
        intervals.sort(key=lambda x: x[0])#将每个组合进行排序 然后进行组合
        i=0
        while i<len(intervals)-1:
            if (intervals[i+1][0]<=intervals[i][1]) :
                intervals[i] = [
                    min(intervals[i][0], intervals[i + 1][0]),#这一步
                    max(intervals[i][1], intervals[i + 1][1])
                ]
                del intervals[i+1]
            else:
                i+=1
        return intervals
solution=Solution()
result=solution.merge([[1,3],[2,6],[8,10],[15,18]])
print(result)

这个执行速度很差 只是消耗内存超过90多 这里继续留一个坑 看看自己啥时候可以想出来更好的办法

这个帖子就是纯记录一些我自己会出现的一些问题 和也可能会出现同样问题的大家互勉

当然这个解题方法是自己想出来的 并不是很好的方法 大家看到没有学习到什么补药骂我~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值