题目:数组中找出和为 N 的两个整数
给定一个整数数组 nums(无序)和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标
示例
输入:[1,6,4,8,7],9
输出:[0,3]
答案
方法一
暴力法,(遍历每个元素 x,并查找是否存在一个值与 target - x 相等的目标元素)
function findTwoNum(arr, target) {
const len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] + arr[j] === target) {
return [i, j];
}
}
}
}
let nums = [1, 6, 4, 8, 7];
console.log(findTwoNum(nums, 9)); // [ 0, 3 ]
方法二
利用对象键值对的方法,循环数组将每一项数组的值作为 key,index 作为值存在对象中,在每一次循环中利用对象读取属性值的方法读取[target-当前值]所对应的 key 的值,如果存在,则该项 key 对应的值则为所找的另一项元素
function findTwoNum(arr, target) {
let temp = {};
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
const diff = target - item;
if (temp[diff] !== undefined) {
return [temp[diff], i];
}
temp[item] = i;
}
}
let nums = [1, 6, 4, 8, 7];
console.log(findTwoNum(nums, 9)); // [ 0, 3 ]