问题形貌
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你能够假定每一个输入只对应一种答案,且一样的元素不能被反复应用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
由于 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
剖析
第一觉得是和我之前做过的题相似,就想先排序然后摆布指针来夹逼,背面一想,排序以后数组下标就乱了,所以这个要领不可
考虑到能够运用一个map,存储的键值对为:target-val:index,也就是关于数组中的每一个数字,存下它和target的差异以及它的下标。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
if(nums === null || nums.length < 2)
return [];
var map = {};
for(var i = 0;i < nums.length;i++) {
map[target-nums[i]] = i;
}
for(var i = 0;i < nums.length;i++) {
var cur = nums[i];
if(map[cur] && map[cur] !== i)
return [i, map[cur]];
}
return [];
};