題目地址: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