这是计算数组中值的解决方案。我得到前三行,duh;),但第三行是魔术发生的地方。有人可以解释'sorted'变量是如何使用的以及为什么它在括号旁边,以及为什么另一个变量'len'被括在括号中然后括在括号中?它几乎就像排序一下子被用作数组?谢谢!
def median(array)
sorted = array.sort
len = sorted.length
return ((sorted[(len - 1) / 2] + sorted[len / 2]) / 2.0).to_f
end
puts median([3,2,3,8,91])
puts median([2,8,3,11,-5])
puts median([4,3,8,11])
答案 0 :(得分:1)
考虑一下:
[1,2,2,3,4]和[1,2,3,4]。两个数组都是排序的,但分别有奇数和偶数个元素。因此,这段代码考虑了这两个案例。
sorted
确实是一个数组。你排序[2,3,1,4]然后你回来[1,2,3,4]。然后计算偶数/奇数元素的中间索引(len - 1) / 2
和len / 2
,并找出它们的平均值。
答案 1 :(得分:1)
是的,array.sort返回一个数组,并将其分配给sorted。然后,您可以通过数组索引访问它。
如果您有一个奇数个元素,比如示例中的5个元素,那么索引就是:
(len-1)/2=(5-1)/2=2
len/2=5/2=2 --- (remember this is integer division, so the decimal gets truncated)
所以你取索引2处的值并加上它们,然后除以2,这与索引2处的值相同。
如果你有偶数个元素,比如4,
(len-1)/2=(4-1)/2=1 --- (remember this is integer division, so the decimal gets truncated)
len/2=4/2=2
所以在这种情况下,你实际上是对两个中间元素1和2进行平均,这是你有一个偶数个元素的中位数的定义。
答案 2 :(得分:0)
它几乎就像排序一下子被用作数组?
是的,确实如此。在第2行,它被初始化为具有与输入相同元素的数组,但是按升序排列(默认排序为升序)。在第3行,你有len
,它是用sorted
数组的长度初始化的,所以是的,sorted
从那时起被用作数组,因为它就是它。