278 字
1 分钟
算法之两数之和

1.两数之和

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

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

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

image-20210613172218604

思路:

根据题意,如果我们使用暴破,会导致时间复杂度为 n^2 ,这样的代价无疑是很大的。

所以我们很容易想到用哈希表来解决这个问题。

我们遍历到数字 a 时,用 target 减去 a,就会得到 b,若 b 存在于哈希表中,我们就可以直接返回结果了。若b 不存在,那么我们需要将 a 存入哈希表,好让后续遍历的数字使用。

image-20210613172048421

image-20210613172111162

image-20210613172123173

image-20210613172134297

/**
* @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++;
}
};
算法之两数之和
https://nollieleo.github.io/posts/算法之两数之和/
作者
翁先森
发布于
2021-06-13
许可协议
CC BY-NC-SA 4.0