[路飞]两数之和

100 阅读1分钟

记录 1 道算法题

两数之和

leetcode-cn.com/problems/tw…

要求: 提供一个数组,和一个数,这个数是数组里的某两个数的和。返回某两个数的下标。不考虑这个两个数的下标顺序。只有一组加数。

如果是暴力解的话,双循环就可以了。有个比较取巧的方法,只需要一次遍历。配合哈希表,当我们遍历到一个数 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++
        }
    }