LeetCode-两数之和(js+Map数据结构)

题目

给定一个整数数组 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里有没有用target减nums[i]得到的数,如果有则返回结果,如果没有则把num[i]当作key,i当作value放入map中(为什么?)u用到了map.has检查map中对应的key

模拟假如:nums=[2,3,11,7] target=
7,6,-2,2
要找到2和7并返0和3
MAP = {
2:0,
3:1,
11:2
}
9-7等于2,在map中有这这个数,就找到了2和7这个对应的值

const twoSum = (nums, target) => {
    
    
  //创建一-个map
    const map = new Map()
    //for循环遍历nums数组
    for (let i= 0; i<nums.length; i++) {
    
    
      //用target减nums[i],以计算哪个数能跟当前的数字相加得到target
      const complement = target - nums[i]
     // 检查map里有没有用target减nums[i]得到的数,如果有则返回结果,如果没有则把num[i]当作key,i当作value放入map中,用到了map.has检查map中对应的key
      if (map.has(complement)) {
    
    
        //如果查找到map中存在就返回两个数对应的下标
        return [map.get(complement),i]
      }else {
    
    
        map.set(nums[i],i)
      }
    }
    return []
}

console.log(twoSum([2,3,11,7],9))//[ 0, 3 ]

猜你喜欢

转载自blog.csdn.net/pz1021/article/details/105799702