题目
给定一个整数数组
nums
和一个目标值target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定
nums = [2, 7, 11, 15], target = 9
因为
nums[0] + nums[1] = 2 + 7 = 9
所以返回[0, 1]
思路
- 遍历数组,并用一个对象依次储存,键为
target - nums[i]
,值为i
- 后面依次取
map[i]
是否已经存在,如果存在则直接返回结果
代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let map = {}
const length = nums.length
for(let i = 0; i < length; i++ ) {
if(typeof map[nums[i]] === 'number') {
return [map[nums[i]], i]
}
map[target - nums[i]] = i
}
};
复杂度分析
- 时间复杂度:O(N)
N 为给定数组的长度。循环一次数组,所以时间复杂度是 O(N)。 - 空间复杂度:O(N)
所需的额外空间来自于对象中所需要存储的元素的数量,对象存储最多存N个。