给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
例如:
给定 nums = [2, 7, 11, 15], target = 9 。 ·8
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解题思路:
1. 把nums想象成相亲者
2. 把target想象成匹配条件
3. 用字典建立一个婚姻介绍所,存储相亲者的数字和下标
解题步骤:
新建一个字典作为婚姻介绍所
遍历nums里的值,有合适的就牵手成功,没有就先登记,字典里面Key就是nums里的值,value就是下标。
var twoSum = function (nums, target) { let map = new Map() // 婚姻介绍所 for (let i = 0; i < nums.length; i++) { const n = nums[i] //自己 const n2 = target - n //对象 if (map.has(n2)) { //是否有合适的对象 return [map.get(n2), i] //有就返回对象的下标和自己的下标 } else { map.set(n, i) // 没有合适的对象就把自己登记到介绍所 } } } let res = twoSum([2, 7, 11, 15], 9)