力扣第15题“三数之和”(python未解决qaq)

我刚开始学python,算法与数据结构实在也不咋地,基本都是暴力解题,想到什么就写什么,然后根据测试用例发现自己哪里逻辑不通,再修改,发帖只是为记录自己的思路,以及之后如何改进,不喜勿喷qaq。(争取每日一题嘻嘻嘻)

题目:

思路:

emmmmm这题我没有想到很好的思路,一开始觉得就是遍历找出所有的长度为3的子列,判断和是否为0,然后剔除重复的子列,返回剩余的子列,可以预计到这样的计算量很大,但是思考了半天也没有太好的解决方案(好吧是我太蠢了qaq)

代码:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        length = len(nums)
        i,j,k = 0,1,2
        list1 =[] 
        temp = []
        while i<length-2:
            j = i+1
            while j < length-1:
                k =j+1
                while k < length:
                    if nums[i]+nums[j]+nums[k] == 0: #先判断和是否为0
                        temp.extend([nums[i],nums[j],nums[k]])
                        temp.sort() #将temp排序,[-1,1,0] !=[1,0,-1],但是这两个数组是重复的
                        if temp not in list1: #防止出现重复
                            list1.append(temp[::])#用temp[::],而不是temp[]是因为,如果是temp[],下一步的temp.clear(),会清空temp,使得list1中的temp也会被清空
                        temp.clear()
                    k+=1    
                j +=1
            i +=1
        return list1 

最后果然超出时间限制了,伤心,超出空间还好,还有优化的可能,时间超出,证明算法一开始思路就不对,伤心qaq,等之后看看大神的解法吧(这题不是语言技术上的,就是逻辑上没有很好的解决思路,类似于数学题没有思路去解决)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值