我正在寻找一种算法来检索最接近3的两个。我没有任何变量可以接近,只有三个。例如,如果我有31,52和84,我希望函数返回31和52。
我尝试了一些使用数组排序的方法,但实际上三个数字是变量(X,Y和Z)。当我对[X,Y,Z]数组进行排序时,我失去了变量的顺序。
我确信这是一个非常简单的解决方案,我现在感觉非常愚蠢......这实际上是一个MAXScript项目,所以我想避免使用特定的语言功能,但是任何类型的信息都会非常感激
答案 0 :(得分:4)
拨打三个号码A,B和C.
计算三个变量:
AB = (A - B)^2
BC = (B - C)^2
CA = (C - A)^2
然后比较AB,BC和CA.如果AB最小,则输出A和B.如果BC最小,则输出B和C.如果CA最小,则输出C和A.
如果你想让它更优雅,可以创建一个由三个数字组成的结构,并创建三个这样的结构,如下所示:
S1 = (A-B)^2, A, B
S2 = (B-C)^2, B, C
S3 = (C-A)^2, C, A
然后根据第一个数字对S1,S2,S3进行排序。对于首先排序的条目,输出其后两个数字。
答案 1 :(得分:3)
对于3个变量,您需要比较它们之间的距离并选择最接近的两个(参见David的回答)。对于n
变量,您可以执行此操作:
O(n log n)
)O(n)
)