找到一個數組中相加為特定數值的兩個元素
阿新 • • 發佈:2019-01-05
作者:lty
時間:2017/7/8 14:39:44
題目:給定一個整數陣列,返回兩個數字的索引,使它們相加到一個特定的目標。您可以假設每個輸入都只有一個解決方案,而您可能不會使用相同的元素兩次。
eg:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]
答:(1)我的做法思路:通過兩個迴圈,讓每一個元素和它後面的所有元素相加然後判斷是否是特定值。
程式碼: var twoSum = function(nums, target) { var lt = nums.length; var arr = []; for (var i=0;i<lt;i++) { for (var y=0;y<lt-i-1;y++) { if((nums[i] + nums[i+1+y]) == target) { arr[0] = i; arr[1] = i+1+y; return arr; } } } return false; }; console.log(twoSum([2,7,11,15],17)); 測試:
時間複雜度:
空間複雜度:
(2)因為覺得我的做法的時間複雜度會高,因為有迴圈套著一個迴圈。所以在網上又尋找別人的做法。
程式碼: var twoSum = function(nums,target) { var arr = []; var exist = []; for(var i = 0;i < nums.length;i++) { if(typeof(exist[target-nums[i]]) !== 'undefined') { arr.push(exist[target-nums[i]]); arr.push(i); } exist[nums[i]] = i; } return arr; };
測試結果相同。
思路分析:將值變成另一個數組的key,將key變成值。因為每次迴圈的時候,target-num[i]的值就是要尋找的值,而如果在一個數組中尋找該值,因為不知道該值對應的key,所以沒法尋找。如果變成尋找的是key,就只需要判斷陣列有沒有這個key就可以了,所以才會在exist陣列中將key和value互換。因為是按順序判斷每個元素的,所以,如果發現exist中沒有某個元素,就將其加入到exist中,以備後面的元素繼續判斷。
時間複雜度:
空間複雜度: