当前位置: 面试刷题>> 两数差等于目标值 (经典算法题500道)


题目描述补充

题目: 在一个未排序的数组中,找到两个数,使得它们的差等于一个给定的目标值。你可以假设数组中每个元素都独一无二,并且你最多只能使用一次每个元素。请编写一个函数来找出所有满足条件的数对(不考虑顺序),并返回它们的索引(而不是值)。

示例

给定数组 nums = [2, 7, 11, 15] 和目标值 target = 9, 函数应该返回 [[0, 1]],因为 nums[0] + nums[1] = 2 + 7 = 9

但注意,题目要求找的是差等于目标值的两个数,因此实际上我们需要调整题目描述为寻找 a - b = target 的数对,但鉴于原描述可能与加法混淆,我们将直接解决差等于目标值的问题。

对于差等于目标值,我们可以遍历数组,并使用哈希表(或称为字典、映射)来存储已经遍历过的元素和它们的索引,然后检查 target + 当前值 是否已经存在于哈希表中,如果存在,则找到了一个解。

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 示例代码

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 示例代码

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]] 或其他符合条件的索引对

码小课网站中有更多相关内容分享给大家学习,希望以上内容能对你有所帮助。

推荐面试题