LeetCode1“两数之和”实现与相关知识学习

Posted 跨越南墙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode1“两数之和”实现与相关知识学习相关的知识,希望对你有一定的参考价值。

解题

所谓两数之和,就是给定一个只包含整数元素数组,和一个整数目标值,从数组中找出两数,满足其和为给定目标整数。
解决方法主要包括两种:暴力循环和借用map

// 暴力循环
const twoSum = (nums, target) => {
    const len = nums.length
    for (let i=0; i<len; i++) {
        let rest = target - nums[i]
        for (let j=i+1; j<len; j++) {
            if (nums[j] === rest) {
                return [i, j]
            }
        }
    }
}
// map
const twoSum = (nums, target) => {
    const map = new Map()
    const len = nums.length
    let i = 0
    let n = 0
    for (; i<len; i++) {
        n = map.get(target - nums[i])
        if (n !== undefined) {
            return [n, i]
        } else {
            map.set(nums[i], i)
        }
    }
}

关于字面量object、Map和哈希表

其实将 const map = new Map()替换成 const map = {}对算法运算并没区别,以前一直听说Map数据类型比字面量object性能高,由于没有在各种情况下(运算量、浏览器什么的)尝试,也说不上来哪个性能更好,不过由于手欠,在leetcode上多运行了几次两者的不同,好像一会儿用时多,一会儿用时少。。。
不过 Map有更多的操作方法,这一点字面量是不能比的,包括 get、set、has、size、forEach/for of遍历(不能用 map遍历);
关于哈希表,也即所谓的散列表,一个key value 映射关系。本题中,将target 和遍历中的整数的差值作为key,能直接取得对应的下标值,很棒很方便!

以上是关于LeetCode1“两数之和”实现与相关知识学习的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode1-两数之和

leetcode1. 两数之和

前端与算法 leetcode 1. 两数之和

LeetCode1两数之和15三数之和

LeetCode1两数之和15三数之和

LeetCode1. 两数之和(Python3)