两数之和
1. 暴力枚举
时间复杂度:O(N^2),空间复杂度:O(1)
js var twoSum = function (nums, target) { for (let i = 0; i < nums.length; i++) { for (let j = i + 1; j < nums.length; j++) { if (nums[i] + nums[j] === target) { return [i, j] } } } };2. 静态哈希表
时间复杂度:O(N),空间复杂度:O(N)
原理:在哈希表里逐个对x查询是否还存在target - x - 将各个数字的key-value存放在map数组里 - 逐个获取target - x - 判断是否存在该哈希表 js var twoSum = function (nums, target) { const map = new Map(); for (let i = 0; i < nums.length; i++) { map.set(nums[i], i); } for (let i = 0; i < nums.length; i++) { const diff = target - nums[i]; if (map.has(diff) && map.get(diff) !== i) { return [i, map.get(diff)]; } } };
3. 动态哈希表
时间复杂度:O(N),空间复杂度:O(N)
原理:在静态哈希表的基础上改进 js var twoSum = function (nums, target) { const map = new Map(); for (let i = 0; i < nums.length; i++) { const num1 = nums[i]; const num2 = target - num1; if (map.has(num2)) { return [i, map.get(num2)] } else { map.set(num1, i); } } };
本文探讨了在JavaScript中解决两数之和问题的三种高效算法,包括暴力枚举、静态哈希表和动态哈希表,分析了它们的时间复杂度和空间复杂度,并提供了相应的代码实现。

被折叠的 条评论
为什么被折叠?



