乐趣区

关于leetcode:1-两数之和

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;
            }
        }
    }
}
退出移动版