我刚开始学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,等之后看看大神的解法吧(这题不是语言技术上的,就是逻辑上没有很好的解决思路,类似于数学题没有思路去解决)