1. 程式人生 > >找到一個數組中相加為特定數值的兩個元素

找到一個數組中相加為特定數值的兩個元素

作者: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中,以備後面的元素繼續判斷。

時間複雜度:

空間複雜度: