【leetcode】1.两数之和

55 阅读1分钟

leetcode-1.png

题目简述:在nums数组之中找到两个元素之和等于target,并返回这两个元素的下标。这一题和167题有点不同的地方在于,167题是经过排序的,这一题是无序的
要解这一题
第一种,暴力破解,两层循环,这里的是假复杂度就比较高了,O(n^2)
第二种,空间换时间,使用map来解决这一题

var twoSum = function (nums, target) {
    // map 存储的形式为 {target - nums[i], i}
    let hash = new Map()
    for (let i = 0; i < nums.length; ++i) {
        if (hash.has(nums[i])) {
            return [i, hash.get(nums[i])]
        } else {
            // 存储的是当前的差值为key,当前元素下标为value
            // 所以当下一次遍历到 has 的时候,第 5 行
            // 如果存在,那么直接返回存的value即可,也就是第 6 行
            hash.set(target - nums[i], i)
        }
    }
    return [-1, -1]
};