我需要找到与给定数字中的平均值最接近(和次要)的数字。例如:

如果给定数字为1,2,3,4,5,则平均值为3,最接近的数字为2和4,但次要数字为2,因此结果应为2。

或者,如果给定的数字为1、325、350、299,则平均值为243.75,因此最接近的数字为299。

int best = a[0];
for (i = 1; i < count; ++i)
best = abs(a[i] - x) < abs(best - x) ? a[i] : best;

最佳答案

您的代码几乎是正确的...您还需要检查与平均x的距离是否与最佳距离相同,但是在次要方面,而best并非如此...。

double i_delta = abs(a[i] - x);
double x_delta = abs(best - x);
if (i_delta < x_delta)
     best = a[i];
else if (i_delta == x_delta && a[i] < best)
     best = a[i];

(您必须对这些值进行一次遍历以计算平均值,因此您的总体算法将为O(n)。因此,像您正在使用的额外迭代不会降低总体big-O效率...全部好。)

关于c++ - 使用数组,浮点数查找最接近的C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26621491/

10-10 21:31