题目地址:https://leetcode-cn.com/problems/two-sum/git
直接双重循环,枚举出全部可能的解,时间复杂度为O(n^2),空间复杂度为O(1)github
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] } } } }
时间复杂度O(n), 空间复杂度O(1)数组
var twoSum = function(nums, target) { let map = new Map() for (let i = 0; i < nums.length; i++) { map.set(nums[i], i) } for (let i = 0; i < nums.length; i++) { if (map.has(target - nums[i]) && i !== map.get(target - nums[i])) { return [i, map.get(target - nums[i])] } } throw new Error('没有这样两个数') }
一次循环,先检查map中是否含有target - nums[i]
,若是找到了,那就是咱们要的结果;若是没有找到就将这个nums[i]存入map中,继续进行下一次循环,此种解法因为只循环了一次,所以时间复杂度会优于解法2数据结构
时间复杂度O(n),空间复杂度O(n)优化
var twoSum = function(nums, target) { let map = new Map(); for (let i = 0; i < nums.length; i++) { if (map.has(target - nums[i]) && i !== map.get(target - nums[i])) { return [i, map.get(target - nums[i])] } map.set(nums[i], i) } throw new Error('没有这样的两个数') };
更多leetcode题解和数据结构方面的知识,请关注个人github:https://github.com/GuoLizhi/code