题解 | #两数之和#
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
我自己写的比较复杂,看了下题解实际上确实简单,先说下我自己的解题方法。 1.遍历一遍数组,存入哈希表,key是numbers[i],value是target - numbers[i],此处遍历时需要注意如果遇到numbers已经在key中存在了,需要做一个判断,如果numbers[i]*2==target,那就返回[numbers.index(numbers[i])+1 , i+1],这种情况说明数组中有两个相同的值,这两个值相加刚好等于target。 2.遍历一遍哈希表,如果value在哈希表中同时是key,那么说明这个key,value刚好加起来是target,找出索引返回即可。
实际上根本不用这么麻烦,只需要遍历一遍数组,然后判断target-numbers[i]是否在key中,是的话就找到了,否则把target-numbers[i]作为key存起来,value存索引即可。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param numbers int整型一维数组
# @param target int整型
# @return int整型一维数组
#
class Solution:
def twoSum(self , numbers, target: int):
# write code here
num_dict = {}
for i in range(len(numbers)):
try:
num_dict[numbers[i]]
if numbers[i] * 2 == target:
return [numbers.index(numbers[i])+1 , i+1]
except:
num_dict[numbers[i]] = target - numbers[i]
for key , value in num_dict.items():
try:
num_dict[value]
if numbers.index(key)!= numbers.index(value):
return [numbers.index(key)+1 , numbers.index(value)+1]
except:
pass
numbers = [358410718,526701935,981692777,914636915]
target = 885112653
print(Solution().twoSum(numbers , target))