具体来说:编写一个函数(用 python、java 或伪代码)average(nums)
打印列表中数字的平均值nums
,并返回一个元组:
- 元组的第一个元素是距离平均值最远的数字的索引。
- 元组的第二个元素是距离平均值最远的数字。
可以用一个循环完成吗?
我知道如何用两个循环编写函数,使用一个或两个循环都需要O(n)
时间,因此从技术上讲,使用一个循环不会使代码变得更高效。但我只是好奇是否可以做到这一点。如果你愿意的话,这是一个派对技巧。
我的一些思考过程:因此,在遍历列表时计算平均值很简单total += nums[i]
,然后avg = total/(i+1)
。我想您可以计算出哪个数字与当前平均值相差最远,但是当您到达列表末尾时,极端数字可能会使您的代码不正确,我想?
是的。距离平均值最远的数字将是样本中的最大或最小值。只需一次遍历数据,您就可以计算平均值并跟踪迄今为止看到的最大和最小元素的索引。最后,您将知道总体最大和最小的索引。您可以检查其中哪一个距离平均值更远,并返回该信息。