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“两数之和”实现与相关知识学习的主要内容,如果未能解决你的问题,请参考以下文章