给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
输入: nums = [3,2,4], target = 6
输出: [1,2]
输入: nums = [3,3], target = 6
输出: [0,1]
题目给的测试用例里有以下限制:
2 <= nums.length <= 4。
2 <= nums[i] <= 11。
6 <= target <= 10。
只会存在一个有效答案。
思路一:
最简单的方式还是通过for循环实现
function twoSum(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]
}
}
}
}
思路二:
1.循环遍历数组中的每个数字,用变量 i表示当前数字的索引。
2.对于每个数字,从当前索引之后的位置开始查找目标值与当前数字的差值是否存在于数组中。
3.使用indexOf()函数在数组中查找与目标值与当前数字的差值相等的数字,将结果保存在变量index中。
4.如果找到了与目标值相等的差值,即index不等于-1,则返回当前数字的索引和目标值的差值的索引,即[i, index]。
5.如果循环结束仍然没有找到符合条件的数字组合,则返回一个空数组或者一个指示未找到的标志。
function twoSum(nums, target) {
for (let i = 0; i < nums.length; i++) {
let index = nums.indexOf(target - nums[i], i + 1)
if (index != -1) {
return [i, index]
}
}
}
思路三:
1.创建一个空的Map对象,用变量名map表示。
2.循环遍历数组中的每个数字,用变量i表示当前数字的索引。
3.对于每个数字,首先通过map.has()方法检查是否存在与目标值与当前数字的差值相等的数字,如果存在,则直接返回两个数字的索引,即[map.get(target - nums[i]), i]。
4.如果不存在与目标值相等的差值,则将当前数字添加到map中,并将当前数字作为键存储在map中,索引值用变量名i表示。
5.如果循环结束仍然没有找到符合条件的数字组合,则返回一个空数组或者一个指示未找到的标志。
function twoSum(nums, target) {
let map = new Map();
for (let i = 0; i < nums.length; i++) {
if (map.has(target - nums[i])) {
return [map.get(target - nums[i]), i];
}
map.set(nums[i], i);
}
return [];
}