278 字
1 分钟
算法之两数之和
1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

思路:
根据题意,如果我们使用暴破,会导致时间复杂度为 n^2 ,这样的代价无疑是很大的。
所以我们很容易想到用哈希表来解决这个问题。
我们遍历到数字 a 时,用 target 减去 a,就会得到 b,若 b 存在于哈希表中,我们就可以直接返回结果了。若b 不存在,那么我们需要将 a 存入哈希表,好让后续遍历的数字使用。




/** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function(nums, target) { let obj = {}; let i = 0; while(i < nums.length){ let sum = target - nums[i]; if(sum in obj){ return [i, obj[sum]] } obj[nums[i]] = i; i++; }};