LeetCode每日一題(一):兩數之和

題目:
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。

示例:
給定 nums = [2, 7, 11, 15], target = 9
因爲 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

暴力解法(初次提交):

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $found = [];
        foreach($nums as $key => $val){
            $diff = $target - $val;
            if(!isset($found[$diff])){
                $found[$val] = $key;
                continue;
            }
            return [$key, $found[$diff]];
        }
    }
}

執行用時1900 ms,內存消耗15.8Mb

利用isset將鍵值顛倒(參考網友):

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $found = [];
        foreach($nums as $key => $val){
            $diff = $target - $val;
            if(!isset($found[$diff])){
                $found[$val] = $key;
                continue;
            }
            return [$key, $found[$diff]];
        }
    }
}

執行用時12ms,內存消耗16.1Mb

第一種方法最暴力最耗時,第二種方法則是利用空間換時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章