力扣两数之和题解-PHP

万能青年
2023-02-25 / 0 评论 / 82 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年02月25日,已超过634天没有更新,若内容或图片失效,请留言反馈。

链接: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

评论 (0)

取消