学习--Day1 leetcode第一题---Map对象

180 阅读1分钟

leetcode 第一题求两数之和

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

思路1: 双循环,暴力求解,循环遍历两边数组,找到两数之和等于目标值。

var twoNums = function(nums, target) {
    const len = nums.length
    for (let i = 0; i < len; i++) {
       for (let j = i + 1; j < len; j++) {
           if (nums[i] + nums[j] === target) {
               return [i, j]
           }
       }
    }
}

思路2: 使用HashMap,哈希表来记录,一次循环遍历,用空间复杂度换取时间复杂度。

1、算出目标值和当前数字的差值。

2、检查哈希表中是否存在该差值,存在则返回结果。

3、不存在,就将当前数字作为key值,索引作为value值存入哈希表。

代码:

var twoNums = function(nums, target) {
    const map = new Map()
    for (i = 0; i < nums.length; i++) {
        if (map.has(target - nums[i])) {
            return [map.get(target - nums[i]), i]
        } else {
            map.set(nums[i], i)
        }
    }
    return []
}

知识点:Map对象

developer.mozilla.org/zh-CN/docs/…