记录 1 道算法题
两数之和
要求: 提供一个数组,和一个数,这个数是数组里的某两个数的和。返回某两个数的下标。不考虑这个两个数的下标顺序。只有一组加数。
如果是暴力解的话,双循环就可以了。有个比较取巧的方法,只需要一次遍历。配合哈希表,当我们遍历到一个数 n 的时候,我们会知道 n 的值,以及 sum - n ,另一个加数的值。所以我们只要判断哈希表里面有没有存这个加数的下标就可以了。如果有,说明就是这两个数。
function twoSum(nums, target) {
const map = {}
let i = 0
while(true) {
// 已知一个加数
const n = nums[i]
// 找另一个加数
const o = target - n
if (map[o] !== undefined) {
return [map[o], i] // 返回下标
}
map[n] = i // 保存遍历过的数的下标
i++
}
}