题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解题思路:
看到这道题,当然我们会觉得很简单,思路我也是有的,首先我们会用最常用的暴力破解法去解决它,通过两个for循环去遍历数组找到两个数相加等于目标值的相对的下标
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
for(let i=0;i<nums.length;i++){
for(let j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]===target){
return [i,j]
}
}
}
};
在这里可以看到暴力破解法耗时长,内存消耗大,
第二种解法
利用js中map集合通过差值来寻找
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
const map = new Map()
for(let i=0;i<nums.length;i++){
const res = target-nums[i]
if(map.has(res)){
return [map.get(res),i]
}else{
map.set(nums[i],i)
}
}
};
只循环一次,然后求得target和当前数值的差值,并且把数组存放在map里面,去map里面循环看是否有这个目标值,有的话,拿到对应值的下标