1. 暴力双循环略过不提;
2. 哈希表 (桶);
对于数组 A,结构一个哈希,首次遍历时候就记录下值和数组下标,再遍历过程中,先判断哈希表里是否曾经有 target – A[i],有的话,间接返回就好了;
复杂度剖析
工夫复杂度:O(N),其中 N 是数组中的元素数量。对于每一个元素 x,咱们能够 O(1) 地寻找 target – x。
空间复杂度:O(N),其中 N 是数组中的元素数量。次要为哈希表的开销。
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]
*/
function twoSum($nums, $target) {$len = count($nums);
$table = [];
$result = [];
//php 数组的底层实现就是 hash 表,这里就不像 c 一样计算最小值那些了步骤了,间接一把梭
for($i=0;$i < $len;$i++) {
// 先判断是否有,有的话间接返回下标
if (isset($table[$target - $nums[$i]])) {return [$table[$target - $nums[$i]],$i];
}else{
// 否则 hash 里的数字 => 下标
$table[$nums[$i]] = $i;
}
}
}
}