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; } } }}