題目:
給定一個整數數組 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
第一種方法最暴力最耗時,第二種方法則是利用空間換時間