题目:给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
这里我讲一下我的思路:
* 1.创建一个map
* 2.for循环遍历nums数组
* 3.用target减nums[i],以计算哪个数能跟当前的数字相加得到target
* 4.检查map里有没有这个数,如果有则返回结果;
* 如果没有则把nums[i]当作key,i当作value放入map中
解题过程:
map{}
i=0; nums[0]=2; com=7; 查找map中有无 7 (无) 将{2:0} 存入map{}
i=1; nums[1]=7; com=2; 查找map中有无 2 (有) 将2对应的value:0和i返回 [0,1]
i=2; nums[2]=11; com=-2, 查找map中有无 -2(无) 将{11,2} 存入map{2:0,11:2}
i=3; nums[3]=15; com=-6; 查找map中有无 -6(无) 将{15,3} 存入map{2:0,11:2,15:3}
代码:
var twoSum = function (nums, target) { // 创建一个map用来存放{key,value} const map = new Map() for (let i = 0; i < nums.length; i++) { // 获取到差值 const complete = target - nums[i] // 判断map中有没有这个差值 if (map.has(complete)) { // 有的话,直接返回这个差值的value,和i return [map.get(complete), i] } else { // 没有的话,将数据和i存进map map.set(nums[i], i) } } // 什么都没有找到就返回空数组 return [] }; console.log(twoSum([2,7,3,5],9))
语法小贴士~
map.has() :
参数:key必填. 用来检测是否存在指定元素的键值.
返回值:Boolean如果指定元素存在于Map
中,则返回true
。其他情况返回false
map.get():