【Python 代码Leetcode一天一题】1,TwoSum
1,
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
Solution 1, 耗时 76 ms
class Solution:
def twoSum(self, nums, target):
a={}
for i,j in enumerate(nums):
a[j]=i
for i,j in enumerate(nums):
b=target - j
if b in a and a[b]!=i:
return[i,a[b]]
Solution 2:
class Solution(object):
def twoSum(self, nums, target):
dict={}
for i in range(len(nums)):
if dict.get(target-nums[i],None) == None:
dict[nums[i]] = i
else:
return (dict[target-nums[i]],i)
p=Solution()
nums=[2,7,11,15]
target=9
p.twoSum(nums,target)
【点评】
Solution 3, 耗时 48 ms
class Solution:
def twoSum(self, nums, target):
'''
:type nums: List[int]
:type target: int
:rtype,list[int]
'''
#用一个空字典来存放数字和对应的index
d=dict()
count=0
for i in nums:
#Python 字典 setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值
#i为list nums 中的数字,count 为nums 列表中的数字的index, 把nums 中所有的元素和index 放入字典d 中。
d.setdefault(i,[]).append(count)
count+=1
#在字典中找到另一个求和元素,并将另一个元素的位置信息返回,若未找到该元素,则返回None, res 是一个列表
res=d.get(target-i,None)
#如果res存在,并且两个求和元素不相等,就返回 res 列表中第一个元素,以及第一个i的位置信息(字典中i是key, 不能重复)
if res:
if i!=target -i:
return[res[0],d.get(i)[0]]
elif len(res)>1:
return res
对于上面的代码,一开始并没有看懂,于是把上面代码改为函数,并打印中间过程,才理解:
运行之后的结果: