当前位置: 面试刷题>> 两数之和(经典算法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)。