java - 如何以独特的方式分配变量以求减法中的补数

标签 java variables variable-assignment

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

本质上,我试图找出数组中存在多少种方式,其中它们的差异等于某个数字(变量diff),并且我想找到“补数”,所以我可以快速在哈希表中查找 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 时,我们基本上会问:“这个数字是我们已经见过的另一个数字的补数吗?”

关于java - 如何以独特的方式分配变量以求减法中的补数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56761356/

相关文章:

java - 如何计算使用 Junit 和 Mockito 调用某个方法的次数?

css - 将 .kit 文件(变量)导入 .kit 文件(css)

java - 是否可以通过引用将变量传递给函数?

c - && 之后的条件变量赋值 (C)

c - 如何为变量赋值并在while循环中检查其值?

java - Hibernate 支持的可用于小型桌面应用程序的单文件数据库是什么?

java - 方法重载和覆盖有什么区别?

java - Realm : Working with RealmChangeListener in Runnable

java - 有没有办法声明一个选项有限的变量?

r - 将 S4 R 对象分配给矩阵 : why does this work?