【leetcode】1两数之和
程序员文章站
2022-04-04 09:53:12
...
打开leetcode突然想用python写,然后开着菜鸟写python,百度很久还去贴吧求助半天,最后写了一段很丑的代码atom运行可以,leetcode运行一边报错一边出结果,说twosum参数给多了,就贴一下自己的学习一下大佬的吧。
class Solution(object):
def twoSum(self,num,number,target):
global flag
flag=0
if number>target :
return
if num+number==target :
flag=1
return number
nums = [2,7,11,15]
target = 9
flag=0
x=Solution()
for num in nums:
for number in nums:
if number == num:
continue
x.twoSum(num,number,target)
if flag==1:
print (nums.index(num),nums.index(number))
break
if flag==1:
break
atom运行成功,不过仅此而已。
再说大佬的,作为小白真的是一边看一边搜那些函数都是啥。
原链接在这https://www.jianshu.com/p/461da897fe21
第一个,同样的暴力解法,但是短
def twoSum(self, nums, target):
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
所谓小白就是,别的语言写习惯了,点进去人家给了class,我扒着菜鸟现学也没想过放弃class,还试图属性方法之后调用,没想过直接一起……
而且没用上人家的输入,自己跟自己玩……
顺便,贴一个菜鸟关于range()函数的用法
然后就是一遍哈希,适用有限
def twoSum(self, nums, target):
# 产生散列表
hash_ = dict(zip(nums, range(len(nums))))
# 反向寻找
for i in range(len(nums)):
other=target-nums[i]
if hash_.get(other):
return [i,hash_[other]]
用了字典,简而言之就是,字典的键是列表里的值,值是索引。然后只遍历一遍,到你了就算一下,你加x到target,然后利用哈希表的特性看看这个x的位置有没有东西,没有就不是,有就返回那个索引。
还是那句话,感觉适用有限。顺便贴个菜鸟的zip()
但是还有个类似的,在 https://blog.csdn.net/zjn295771349/article/details/86572602
class Solution:
def twoSum(self, nums, target):
n = len(nums)
#创建一个空字典
d = {}
for x in range(n):
a = target - nums[x]
#字典d中存在nums[x]时
if nums[x] in d:
return d[nums[x]],x
#否则往字典增加键/值对
else:
d[a] = x
贴一下原博的解释,已经很清楚了
于是官解还有个两遍哈希,链接在https://leetcode-cn.com/problems/two-sum/solution/xiao-bai-pythonji-chong-jie-fa-by-lao-la-rou-yue-j/
def twoSum(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]
今日份的面向复制粘贴编程结束╮(╯▽╰)╭
上一篇: 前端页面由哪三大层构成