输出:一个整数数组,一个指标整数
计算:在数组中找出和为目标值的两个整数,留神不能为同一元素
输入:两个数对应下标组成的数组,找不到则返回空数组
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 = 10let target2 = 19console.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 = 10console.log(sumOfTwoNum(arr, target))