gpt4 book ai didi

java - 从频率数组中获取中值?

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:34 28 4
gpt4 key购买 nike

我有一个数组,例如在array[1]中将包含一个数字列表中出现的次数,同样array[2]将包含有很多双。

这是我迄今为止尝试过的

    int tot = 0;
for(int i=0; i<array.length; i++){
tot += array[i];
}
int mid = tot/2;
int med = array[mid];
return med;

这不行,我感觉还有很多计算没做。任何指导表示赞赏。谢谢!

最佳答案

这里的问题是你需要找到你看到“中间”的索引:

int tot = 0;
for(int i=0; i<array.length; i++){
tot += array[i];
}
int mid = tot/2;
int med = 0;
tot = 0;
for(int i=0; i<array.length; i++){
tot += array[i];
if(tot >= mid) {
med = i;
break;
}
}

return med;

更新:正如 Ajay Reddy 在评论中所述,上面的代码仅适用于数组长度不均匀的情况。对于偶数长度,有上中位数和下中位数,其平均值就是实际中位数。如果您确实想要这取决于您之后对中位数所做的事情(如果需要实际发生,请使用上面的代码,它会找到较低的中位数)。

int tot = 0;
for(int i=0; i<array.length; i++){
tot += array[i];
}
float mid = tot/2;
int upper_med = 0;
int lower_med = 0;
tot = 0;
for(int i=0; i<array.length; i++){
tot += array[i];
if(i > 0 && array[i-1] > 0) {
lower_med = i;
}
if(tot >= mid) {
upper_med = i;
break;
}
}

return array.length % 2 == 0 ? (float)(upper_med + lower_med)/2 : lower_med; // cast to float or not according to your requirements

关于java - 从频率数组中获取中值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23603281/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com