当前位置: 面试刷题>> 两数差等于目标值 (经典算法题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]] 或其他符合条件的索引对 ``` **码小课网站中有更多相关内容分享给大家学习**,希望以上内容能对你有所帮助。
推荐面试题