leetcode 1 两数之和 JavaScript 思路: 这里直接暴力两层遍历就能完成了,但是今天换一种思路。 设一个map对象用来存放key和value,key对应当前值,value对应当前下标。(这里直接把原本内层遍历的O(n)变为O(1)了) 遍历的时候判断的是key是否存在target-当前值 那为啥是target-当前值呢,想一下我们现在需要的是两个值相加=target,当前遍历的时候,已知的值有两个,一个是target,一个是当前值,那么只需要再匹配一个值与当前值相加==target之后遍历就结束了,所以map中把key存为target-当前值;value存为当前下标,表示我已经有这个下标了,遍历的时候再匹配一个符合要求的下标,一起返回作为结果就可以了。 代码如下:
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let map = {};//key对应nums[i] value对应下标i
for(let i=0;i<nums.length;i++){
if(map.hasOwnProperty(target-nums[i])){
return [map[target-nums[i]],i]
}
map[nums[i]] = i;
}
return [0];
};
|