【题目】: 实现一个函数,找出一个数组中的两个数,使它们的和等于给定的目标值,并返回这两个数的索引。
【要求】:
- 假设每个输入都只有一个解决方案,而且不能重复使用相同的元素。
- 可以假设数组中没有重复的数字。
示例输入:twoSum([2, 7, 11, 15], 9) 示例输出:[0, 1]
---------请思考---------
【答案】
解题思路:可以使用哈希表来快速查找数组中是否存在满足条件的数。遍历数组的过程中,用目标值减去当前元素得到差值,然后判断这个差值是否已经存在于哈希表中,如果存在则说明找到了这两个数,返回它们的索引;如果不存在,则将当前元素加入哈希表中。这样只需一次遍历即可得到结果。
function twoSum(nums, target) {
const numMap = {}; // 用来存储数字和对应的索引
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (numMap[complement] !== undefined) {
return [numMap[complement], i];
}
numMap[nums[i]] = i;
}
return null; // 如果没有找到符合条件的数,则返回 null}
console.log(twoSum([2, 7, 11, 15], 9));
}
这个解答会输出 [0, 1],因为数组中的第0个元素和第1个元素相加等于目标值 9。希望这道题目能对你有所帮助!