如何以独特的方式为减法中的补码分配变量
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?"
我正在尝试分配变量 "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?"