如何以独特的方式为减法中的补码分配变量

How to assign variable in unique way for complement in subtraction

我正在尝试分配变量 "complement" 以使表达式 Math.abs(array[i]-complement)==diff 为真,但我对如何实现它感到困惑。我考虑过尝试使用条件,如果 array[i] 大于 diff,那么 complement 会发生什么,但这些条件并不总是在所有情况下都是正确的。谁能告诉我这是否可行,如果不行,我该怎么办?

本质上,我试图找出数组中有多少种方式存在一对,其中它们的差异等于某个数字(变量 diff),我想找到 "complement"所以我可以快速在散列 table 中查找 O(N) 时间复杂度。

这基本上就是 2-diff 的问题。

我可以写出伪代码,但实现由你决定!

前言

您的代码应该 运行 在 O(n) 中,这样您就可以了解如何实施此解决方案。 O(n) 建议您逐一循环您的数字,不应有任何嵌套循环!

您还想使用 HashMap 来快速循环计算值。 我们用一个hashmap来存储每个数的补码,方便以后遇到!

伪代码

let nums be our array of numbers
let diff be our difference
let hash be a hashtable under SUHA

for each num in nums:
    if (num in hash):
        (num, hash[num]) is our pair!
    let c1 = num + diff
    let c2 = num - diff

    hash[c1] = num
    hash[c2] = num

就是这样!

直觉

hashmap 存储了所有数字的补码,所以当我们查看 hashmap 时,我们基本上是在问,"is this number a complement of another number we have already seen?"