关于算法:两数之和

输出:一个整数数组,一个指标整数
计算:在数组中找出为目标值的两个整数,留神不能为同一元素
输入:两个数对应下标组成的数组,找不到则返回空数组

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))

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理