>[success] # 求两数之和 ~~~ 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 ~~~ * 示例 ~~~ 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] ~~~ >[danger] ##### 解题--PYTHON * 思路 ~~~ 1.利用enumerate 知道,列表中对应的位置 2.利用字典存储 3.利用字典in 可以判断k 是否存在 ~~~ ~~~ class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ dic = {} for k,v in enumerate(nums): if v in dic: return [dic[v],k] else: dic[target-v] = k ~~~ * 最快解法 ![](https://box.kancloud.cn/f7ffc503dc03513484ce142b5ba5f739_815x403.png) >[danger] ##### 两数之和 JAVASPRICT ~~~ 1.和python 思路一样用差值方法去解这个问 ~~~ * 利用 javaSprict 的for i in 判断当前key是否存在 ~~~ /** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { let targetObje = {} for(var index=0;index<nums.length;index++){ let sub = target - nums[index] if(nums[index] in targetObje){ return [targetObje[nums[index]],index] }else{ targetObje[sub] = index } } }; ~~~ * 利用typeof 替代 for i in的判断 ~~~ let twoSum = function(nums, target) { let map = {}; let length=nums.length for(let i =0; i<length;i++){ let d = target - nums[i] if(typeof(map[d]) !== 'undefined'){ return [map[d], i] }else{ map[nums[i]]=i } } };