题目:
给定一个整数数组 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) {
$res = array();
$count = count($nums);
for($i=0; $i<$count-1; $i++){
for($j=$i+1; $j<$count; $j++){
$sum = $nums[$i]+$nums[$j];
if($sum == $target){
$res = [$i, $j];
}
}
}
return $res;
}
}
执行用时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
第一种方法最暴力最耗时,第二种方法则是利用空间换时间
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。