我想计算双精度数组的平均值,然后将数组中最接近的元素的值返回到计算的平均值。但是我使用的算法是O(2n)。是否可以确定最接近平均值的元素,同时仍然计算平均值?我想不是。计算平均值,然后将最接近的元素返回到平均值
#include <iostream>
#include <cmath>
using namespace std;
double* aver(double* arr, size_t size, double& average){
for(int i = 0; i < size; i++)
average+=arr[i];
average/=size;
double* ret = arr;
for(int i = 0; i < size; i++){
if(abs(arr[i] - average) < abs(*ret - average)){
*ret = arr[i];
}
}
return ret;
}
int main(){
double arr[] = {1,2,3,4,5,7};
size_t size = sizeof(arr)/sizeof(arr[0]);
double average = 0;
double* p = aver(arr, size, average);
cout<< *p << " " << average << endl;
return 0;
}
数组是否会按排序顺序?如果是的话我们可以优化我们的循环 – 999k
可能有一个聪明的窍门,即在一次传递中同时获得平均值和最接近平均值的元素,但它可能不会产生任何类型的实际性能差异,因为O(n)和O(2n)是相同的东西。 –
你检查了这个问题的其他答案http://stackoverflow.com/q/19504289/1151831 – 999k