python - 计算将数组中的值向上或向下舍入以最小影响平均值的点的算法

标签 python arrays algorithm search mean

考虑值在 0 和 1 之间的随机数组,例如:

[0.1,0.2,0.8,0.9]

有没有办法计算值应该向下或向上舍入到整数的点,以便最接近地匹配未舍入数组的平均值? (在上述情况下,它会处于平均水平,但这纯属巧合)

还是只是反复试验? 我在 python 中编码

谢谢你的帮助

最佳答案

将它们相加,然后四舍五入。这就是你想要的 1 的数量。舍入,所以你得到那么多 1。

def rounding_point(l):
    # if the input is sorted, you don't need the following line
    l = sorted(l)
    ones_needed = int(round(sum(l)))
    # this may require adjustment if there are duplicates in the input
    return 1.0 if ones_needed == len(l) else l[-ones_needed]

如果结果证明对列表进行排序过于昂贵,您可以使用 selection algorithm像快速选择。不过,Python 没有内置快速选择函数,所以除非您的输入足够大,以至于快速选择的渐近优势超过高度优化的 C 排序算法的常数因子优势,否则请不要打扰。

关于python - 计算将数组中的值向上或向下舍入以最小影响平均值的点的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17679544/

相关文章:

algorithm - 将数据发送到串口的最佳方式是什么?

javascript - 迭代树序列化函数

javascript - Selenium 无法通过 XPath 识别元素

使用列表结构但不使用列表方法的Python堆栈模拟

java - Activity 调度算法设计,最大化 Activity 数量

android - 在有 Intent 的 Activity 之间传递 int[] 数组时为空

java - 在数组中查找不重复的最大 GCD 总和

python - 为嵌套字典获取 2 个具有最高值的键

python - 下面的函数是 O(n) 时间和 O(1) 空间,其中 n = |A|?

C++ 超出下标范围