题目一:两数之和
题目内容:给定一个整数数组 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]
我这边提供一个非常非常小白的写法,代码如下:
typescript
function twoSum(nums: number[], target: number): number[] {
let targetList = [] as number[];
for(let i = 0; i < nums.length;i ++) {
//先取第一个数
let targetNum = nums[i];
for( let j = i + 1; j< nums.length; j++) {
//拿第一个数和其他数进行比较
if(nums[i] + nums[j] === target) {
targetList.push(i);
targetList.push(j);
return targetList;
}
}
}
return targetList;
};
然后有基础的就可以直接跳过上面的,看下面的
typescript
function twoSum(nums: number[], target: number): number[] {
// 两数之和: 经典简单哈希表
const map = new Map();
for(let i = 0; i < nums.length; i++) {
// 计算需要的数
const need = target - nums[i];
// 判断是否已经储存有需要的数, 若有则获取并返回两数分别的索引
if(map.has(need)) {
return [i, map.get(need)];
}
// 每遍历过一个数, 储存入哈希表
// 注意: 先尝试寻找需要的数, 再加入本数入哈希表, 避免重复使用某个数
map.set(nums[i], i);
}
};