背景:
给定一个整数数组
nums
和一个整数目标值target
,请你在该数组中找出 和为目标值target
的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:
输入:nums = [3,2,4], target = 6 输出:[1,2]示例 3:
输入:nums = [3,3], target = 6 输出:[0,1]
核心代码:
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let indexArr
nums.forEach((item,index) => {
const temp = target - item
if(temp == nums[index + 1]){
indexArr= [index,index + 1]
}else if(temp == nums[index + 2]){
indexArr= [index,index + 2]
}else if(temp == nums[index + 3]){
indexArr= [index,index + 3]
}
})
return indexArr
};
效果展示:
正确代码:
const twoSum = (nums, target) => {
const prevNums = {};
for (let i = 0; i < nums.length; i++) { // 遍历元素
const curNum = nums[i]; // 当前元素
const targetNum = target - curNum; // 满足要求的目标元素
const targetNumIndex = prevNums[targetNum];
console.log('hhh>>>', targetNumIndex)
if (targetNumIndex !== undefined) { // 如果存在
return [targetNumIndex, i];
} else { // 如果不存在
prevNums[curNum] = i; // 存入当前的元素和对应的索引
console.log('hhh 22>>>', prevNums)
}
}
}
const twoSum = (nums, target) => {
let tempObj = {};
let returnArr
nums.forEach((item, index) => {
const tempNum = target - item
const tempIndex = tempObj[tempNum]
if (tempIndex !== undefined) {
returnArr = [tempIndex, index]
return returnArr
} else {
tempObj[item] = index
}
})
return returnArr
}