用JS解一道经典算法题-两数之和:给定一个整数数组nums和一个整数目标值target,请你返回该数组中和为target的两个整数的下标

202 阅读1分钟

两数之和:给定一个整数数组nums和一个整数目标值target,请你返回该数组中和为target的两个元素的下标 可以假设每种输入只会对应一个答案。但是,数组中同一个元素的下标在答案里不能重复出现。

代码如下:

function twoSum(nums, target) {
      let obj = {}
      for (let i = 0; i < nums.length; i++) {
        const firstNum = nums[i]
        const secondNum = target - firstNum
        if (obj[firstNum]) {
          /* 注意第一个元素的下标不要用indexOf()获取,
          例如当nums=[3,3],target=6时,如果直接用indexOf()获取第一个数,
          最后返回的两个数组元素的索引值会重复 */
          let x = i
          let y = nums.indexOf(secondNum)
          return [x, y]
        }
        obj[secondNum] = true
      }
    }
//调用函数
    console.log(twoSum([1, 2, 3, 4, 5, 6, 7], 13)) 
    //得到两元素下标的数组:[6,5]
    console.log(twoSum([3, 3], 6)) 
    //得到两元素下标的数组:[1,0]