当前位置: 面试刷题>> 两数差等于目标值 (经典算法题500道)
### 题目描述补充
**题目**: 在一个未排序的数组中,找到两个数,使得它们的差等于一个给定的目标值。你可以假设数组中每个元素都独一无二,并且你最多只能使用一次每个元素。请编写一个函数来找出所有满足条件的数对(不考虑顺序),并返回它们的索引(而不是值)。
**示例**:
给定数组 `nums = [2, 7, 11, 15]` 和目标值 `target = 9`,
函数应该返回 `[[0, 1]]`,因为 `nums[0] + nums[1] = 2 + 7 = 9`。
但注意,题目要求找的是差等于目标值的两个数,因此实际上我们需要调整题目描述为寻找 `a - b = target` 的数对,但鉴于原描述可能与加法混淆,我们将直接解决差等于目标值的问题。
对于差等于目标值,我们可以遍历数组,并使用哈希表(或称为字典、映射)来存储已经遍历过的元素和它们的索引,然后检查 `target + 当前值` 是否已经存在于哈希表中,如果存在,则找到了一个解。
### PHP 示例代码
```php
function findPairsWithDifference($nums, $target) {
$result = [];
$numMap = [];
for ($i = 0; $i < count($nums); $i++) {
$complement = $nums[$i] - $target;
if (isset($numMap[$complement])) {
$result[] = [$numMap[$complement], $i];
}
$numMap[$nums[$i]] = $i;
}
return $result;
}
// 示例
$nums = [2, 7, 11, 15];
$target = 5; // 调整为示例中可能存在的差值
$result = findPairsWithDifference($nums, $target);
print_r($result); // 输出 [[1, 0]] 或其他符合条件的索引对
```
### Python 示例代码
```python
def find_pairs_with_difference(nums, target):
result = []
num_map = {}
for i, num in enumerate(nums):
complement = num - target
if complement in num_map:
result.append([num_map[complement], i])
num_map[num] = i
return result
# 示例
nums = [2, 7, 11, 15]
target = 5 # 调整为示例中可能存在的差值
result = find_pairs_with_difference(nums, target)
print(result) # 输出 [[1, 0]] 或其他符合条件的索引对
```
### JavaScript 示例代码
```javascript
function findPairsWithDifference(nums, target) {
const result = [];
const numMap = {};
for (let i = 0; i < nums.length; i++) {
const complement = nums[i] - target;
if (numMap[complement] !== undefined) {
result.push([numMap[complement], i]);
}
numMap[nums[i]] = i;
}
return result;
}
// 示例
const nums = [2, 7, 11, 15];
const target = 5; // 调整为示例中可能存在的差值
const result = findPairsWithDifference(nums, target);
console.log(result); // 输出 [[1, 0]] 或其他符合条件的索引对
```
**码小课网站中有更多相关内容分享给大家学习**,希望以上内容能对你有所帮助。