输入:一个整数数组,一个目标整数
计算:在数组中找出和为目标值的两个整数,注意不能为同一元素
输出:两个数对应下标组成的数组,找不到则返回空数组
eg:输入[2,3,5,7,11,15],10
10 = 3 + 7 => [1, 3]
法1:for + indexOf
function sumOfTwoNum(arr, target) {
for (let i = 0; i < arr.length; i++) {
let value = target - arr[i]
if (arr.indexOf(value) !== -1 && arr.indexOf(value) !== i) {
return [i, arr.indexOf(value)]
}
}
return []
}
let arr = [2,3,5,7,11,15]
let target1 = 10
let target2 = 19
console.log(sumOfTwoNum(arr, target1))
console.log(sumOfTwoNum(arr, target2))
法2:使用字典map
function sumOfTwoNum(arr, target) {
let map = new Map();
for (let i = 0; i < arr.length; i++) {
// num 为 target 减去 当前循环的数值
num = target - arr[i];
// 在map中查找是否有键名为num的元素
if (map.has(num)) {
// 如果有,返回num的下标,以及当前循环的下标
return [map.get(num), i];
}
// 如果没有,存进map
// 键名为数值,值为下标,因为最终需要返回的是下标
map.set(arr[i], i);
}
return []
}
let arr = [2,3,5,7,11,15]
let target = 10
console.log(sumOfTwoNum(arr, target))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。