愚蠢的我第一次做力扣的题库,点开题懵逼了。
答题界面如下:
看着这个空旷的界面我陷入了沉思,输入在哪?输出在哪?
我操着用OJ的思路来了发input和print,毫无疑问的失败了,于是看着模板提示陷入了沉思。
那试试类?
于是对着编码区又是一番操作,好嘛,失败。
但是我想着用类应该是没错的,于是:
好歹成功运行代码没报错嘛!笑。
果然,输入就是图1所示方法中的两个参数,且给出了参数的类型,如图1,nums是list[int],是一个列表对象,且其中的元素都是数值类型。
至于输出,当我使用print再次失败后我猜想输出应该是使用return,实践果然如此。
所以第一题的编程就是完善Solution类下的sumTwo方法,输入是方法的参数,输出是使用return。
第一题答案预警!
·
·以下都是答案和分析。
·
·
·
·
·
·
·
·
·
·
class Solution:
def twoSum(self, nums, target):
ls = [x for x in range(len(nums))]
dt = dict(zip(ls, nums))
for i in dt:
for j in dt:
if i>=j:
continue
if dt[i]+dt[j]==target:
return ([i,j])
执行用时:7784 ms,内存消耗:15.8 MB,环境:Python3
作为菜菜子的我用暴力穷举法的思路,虽然成功了但是时间复杂度总的来说是O(n^2),所以耗时极………………………………………………长。
垃圾方法还是pass掉好啦。
本来想把力扣里大佬的python解法搬过来的,但想着可能重复了,还是只贴一个链接吧。——➡大佬整理的思路和代码
——————
发现大佬整理的答案不全,也存在一些问题,还是也写一个好了。
class Solution:#核心思路是看两者差值是否也在列表里
def twoSum(self, nums, target):
j=-1
for i in range(len(nums)):
if (target - nums[i]) in nums:
if (nums.count(target - nums[i]) == 1)&(target - nums[i] == nums[i]):#如果num2=num1,且nums中只出现了一次,说明找到是num1本身。
continue
else:
j = nums.index(target - nums[i],i+1) #index(x,i+1)是从num1后的序列后找num2
break
if j>0:
return [i,j]
else:
return []
#核心思路是看两者差值是否也在列表里,且对比范围直接从i后一位开始。
class Solution:
def twoSum(self, nums, target):
j=-1
for i in range(0,len(nums)):
temp = nums[i+1:]
if (target - nums[i]) in temp:
j = temp.index(target - nums[i])+i+1
break
if j>=0:
return [i,j]
执行时间:856 ms 内存消耗:14.7 MB
总是进行一次遍历,那么遍历过程中用哈希表记录数据可以方便之后的查找。
class Solution:
def twoSum(self,nums, target):
hashmap={}
for ind,num in enumerate(nums):
hashmap[num] = ind
for i,num in enumerate(nums):
j = hashmap.get(target - num)
if j is not None and i!=j:
return [i,j]
s=Solution()
nums = [1,2,4,5,5,5,5]
target = 6
print(s.twoSum(nums,target))
这个方法也可以得到结果,但问题在于,一旦列表中有重复的元素,以元素作为字典的键得到的值一定是重复元素中的较大索引值。
#优化方法为:
class Solution:
def twoSum(self,nums, target):
"""这样写更直观,遍历列表同时查字典,同步将值插入字典。"""
dct = {}
for i, n in enumerate(nums):
if target - n in dct:
return [dct[target - n], i]
dct[n] = i
s=Solution()
nums = [1,2,5,5,5,5,5,5,6]
target = 6
print(s.twoSum(nums,target))
执行用时 :64 ms, 在所有 python3 提交中击败了92.25%的用户
内存消耗 :15.1 MB, 在所有 python3 提交中击败了5.05%的用户