当前位置: 面试刷题>> 两数之和(经典算法150题)


### 题目描述 给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值 `target` 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 **示例 1**: ``` 输入: nums = [2, 7, 11, 15], target = 9 输出: [0, 1] 解释: 因为 nums[0] + nums[1] == 9, 所以返回 [0, 1] ``` **示例 2**: ``` 输入: nums = [3, 2, 4], target = 6 输出: [1, 2] ``` **示例 3**: ``` 输入: nums = [3, 3], target = 6 输出: [0, 1] ``` ### PHP 代码示例 ```php function twoSum($nums, $target) { $map = []; $length = count($nums); for ($i = 0; $i < $length; $i++) { $complement = $target - $nums[$i]; if (isset($map[$complement])) { return [$map[$complement], $i]; } $map[$nums[$i]] = $i; } return []; } // 示例用法 $nums = [2, 7, 11, 15]; $target = 9; $result = twoSum($nums, $target); print_r($result); // 输出: Array ( [0] => 0 [1] => 1 ) ``` ### Python 代码示例 ```python def twoSum(nums, target): hash_map = {} for i, num in enumerate(nums): complement = target - num if complement in hash_map: return [hash_map[complement], i] hash_map[num] = i return [] # 示例用法 nums = [2, 7, 11, 15] target = 9 result = twoSum(nums, target) print(result) # 输出: [0, 1] ``` ### JavaScript 代码示例 ```javascript function twoSum(nums, target) { const map = new Map(); for (let i = 0; i < nums.length; i++) { const complement = target - nums[i]; if (map.has(complement)) { return [map.get(complement), i]; } map.set(nums[i], i); } return []; } // 示例用法 const nums = [2, 7, 11, 15]; const target = 9; const result = twoSum(nums, target); console.log(result); // 输出: [0, 1] ``` 以上三种语言的实现都使用了哈希表(在PHP中是关联数组,在Python中是字典,在JavaScript中是Map)来记录已经遍历过的数字及其索引,从而快速查找补数是否存在。这种方法的时间复杂度是O(n),空间复杂度也是O(n)。
推荐面试题