leetcode[1]两数之和

题目:给定一个整数数组 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():

  参数:key必填. 想要获取元素的键.

  返回值:返回一个Map对象中与指定键相关联的值,如果找不到这个键则返回undefined,

原文地址:https://www.cnblogs.com/yaya-003/p/12698552.html