你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
链接:https://leetcode.cn/problems/two-sum
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
思路
当我们已知 $target值及第一个循环出来的值,那么我们可以通过计算拿到另外一个值
如果使用两个for循环,当数据量过大时会消耗很大内存,所以得改改思路
第一个for循环是避免不了的,所以我们可以优化第二个for循环
首先,我们新建一个空数组存已遍历过的数组下标
循环的时候,拿到了循环的值及$target值,可以计算出另外一个值 $diff = $target - $nums[$i];
再到之前建立的数组里面去找有没有,有则返回第二个下标,没有则存入数组
$map[值] = 下标;
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]
*/
function twoSum($nums, $target) {
$map = []; //存已遍历数据下标
for($i=0;$i<count($nums);$i++)
{
$diff = $target - $nums[$i];
if(isset($map[$diff])){
return [$map[$diff],$i];
}
$map[$nums[$i]] = $i;
}
return [];
}
}
评论 (0)