【发布时间】:2015-02-15 06:16:28
【问题描述】:
我正在尝试在 Python 中创建一个算法,该算法将采用从 0 到 1,000,000 的随机数列表,长度不超过 100 个元素,并且会尽可能地将该数组平均化,从而为我提供最大数量的相等元素.这是我目前所拥有的:
def answer(x):
diff = max(x) - min(x)
while diff > 1:
x[x.index(max(x))] = x[x.index(max(x))] - (diff / 2)
x[x.index(min(x))] = x[x.index(min(x))] + (diff / 2)
diff = max(x) - min(x)
return count(x)
def count(x):
from collections import Counter
c = Counter(x)
return max(c.values())
这将获取一个数组,例如 [0,50] 并创建一个数组 [25,25] 并返回整数 2,因为数组中有两个相等的元素。我知道这个算法在大多数情况下都有效,但它根本不起作用。 谁能指出任何不会产生正确答案的整数数组?谢谢
编辑:
对于那些不想阅读 while 循环的人来说,代码查找整个列表的范围。将范围分成两半,将一半加到最小值,然后从最大值减去一半。它试图均衡整个列表,同时保持相同的总和
[1,4,1] = [2,3,1] = [2,2,2] =(相等元素的数量)3
[2,1,4,9] = [2,5,4,5] = [3,4,4,5] = [4,4,4,4] = (相等元素的数量) all4
【问题讨论】:
-
如果您已经知道它并不总是有效,为什么还需要我们告诉您何时它并不总是有效?
-
我只知道在一些我不知道数组是什么的测试中,它失败了我不知道哪些条件使它失败了,这就是我所知道的
-
您想要 0-1m 范围内的 100 个随机数并希望找到最大相等的数?
-
我不明白。你试图用数组的平均值替换数组中的所有数字? (这就是 [0,50] -> [25,25] 对我的建议)
-
是的,如果您阅读了 while 循环中明显的信息
标签: python arrays algorithm list