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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理