问题描述:
给定一个整数数列,找出其中和为特定值的那两个数。
你可以假设每个输入都只会有一种答案,同样的元素不能被重用。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
我的答案:
1 /** 2 * @param {number[]} nums 3 * @param {number} target 4 * @return {number[]} 5 */ 6 var twoSum = function(nums, target) { 7 var a=[]; 8 for(var i=0;i<nums.length-1;i++){ 9 for(var j=i+1;j<nums.length;j++){ 10 if(nums[i]+nums[j]==target){ 11 a.push(i); 12 a.push(j); 13 } 14 } 15 } 16 return a; 17 };
优秀答案:
参考 http://www.cnblogs.com/kiznaiver1998/p/8605809.html
解题思路:构造了arr{ key:value} 对象。将target-nums[i] 差值放在arr{ }对象中,并存储其位置i。然后每次就在arr{ }对象中找有没有对应的数即可。
function twoSum(nums, target) { var arr = {}; for (var i = 0; i < nums.length; i++) { if (typeof(arr[nums[i]]) !== "undefined"){ return [arr[nums[i]], i]; } arr[target - nums[i]] = i; } }