Leetcode-1.两数之和

96 阅读1分钟

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例一

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例二

输入: nums = [3,2,4], target = 6
输出: [1,2]

示例二

输入: nums = [3,3], target = 6
输出: [0,1]

解题思路

因为是求两个数字的和,是需要一个数字加上另一个数字的,那么我不妨在遍历的时候将target-当前数字的差存起来,也就是每个数字缺的那个数字存起来,然后遍历后面的数字的时候我们就去判断当前遍历的数字是否在我们存起来的数字中。

   var twoSum = function(nums, target) {
       // 定义一个对象用于存储target-当前遍历值的差值
       let retObj = {}
       let n = nums.length
       for (let i = 0; i < n; i++) {
           let num = nums[i]
           let val = retObj[num]
           // 当对象存储的差值有当前值的时候就直接返回记录的值的索引和当前值的索引
           // 否则将当前差值作为key,索引作为val存入retObj中
           if (val !== void 0) {
               return [val, i]
           } else {
               retObj[target - num] = i
           }
       }
   }