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对象