给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案
。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
题解 1: 暴力法
var twoSum = function(nums, target) {var length = nums.lengthfor (var x = 0; x < length; x++) {for (var y = x + 1; y < length; y++) {if (nums[x] + nums[y] === target) {var arr = []arr.push(x)arr.push(y)return arr}}}}
题解 2-1: 哈希表
思路:
需要留意的是, 如果数组中有重复的值比如 [5, 5], target = 10 这种情况的处理
哈希表
中是否有和当前索引值 nums[i]
对应的匹配值 target - nums[i]
;var twoSum = function(nums, target) {let numsObj = {}for (let i = 0; i < nums.length; i++) {let current = nums[i]let match = target - currentif (match in numsObj) {return [i, numsObj[match]]}numsObj[current] = i}}
题解 2-2: 使用 Map, 思路同哈希表
var twoSum = function(nums, target) {var map = new Map()for (let i = 0; i < nums.length; i++) {const targetValue = target - nums[i]const getTargetValue = map.get(targetValue)if (typeof(getTargetValue) === 'number') {return [i, getTargetValue]}map.set(nums[i], i)}}
15、16、18