题解 | #两数之和#

两数之和

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))
全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务