两数之和
前沿说明:算法学习,日常刷题记录。
题目链接
题目内容
给定一个整数数组 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]
/* 提示:
将数组内部所有元素两两相加,并直接保存每个相加后的指针
*/
分析过程
定义一个长串数组,将数组内的值两两相加得出最后结果
- 我们举例数组是 [2, 7, 11, 15] 期望得到的值是 9。
- 第一次:先定义一个空对象hash,假设第一次传入2,然后用期望值9减去2,得到7,然后不管数组内有没有对应的元素与之对应,都将其以{ 值: 下标 }存入到空对象hash中(这一步骤是灵魂操作)
- 第二次:传入7,然后用期望值9减去7,得到2,然后和第一步一样继续存入到空对象hash中
- 第三次继续重复第二次...
解答代码:
const twoSum = function (nums, target) {
const hash = {}
for (let i = 0; i < nums.length; ++i) {
if (hash[target - nums[i]] !== undefined) return [hash[target - nums[i]], i]
hash[nums[i]] = i
}
console.log(hash) // 验证输出所有数
return new Error('不存在该数')
}
twoSum([2, 7 ,11, 15], 9) // [0, 1]
今天结束,下次继续~