如何使用Ruby计算数字数组的中位数?
我是初学者,在学习的过程中,我正努力坚持已经教过的东西.因此,我发现的其他问题超出了我的范围.
这是我的笔记和我的尝试:
取这两个中间数的平均值.
def median(array)
ascend = array.sort
if ascend % 2 != 0
(ascend.length + 1) / 2.0
else
((ascend.length/2.0) + ((ascend.length + 2)/2.0) / 2.0)
end
end
Run Code Online (Sandbox Code Playgroud)nba*_*lle 85
这是一个适用于偶数和奇数长度数组的解决方案,不会改变数组:
def median(array)
sorted = array.sort
len = sorted.length
(sorted[(len - 1) / 2] + sorted[len / 2]) / 2.0
end
Run Code Online (Sandbox Code Playgroud)
与 nbarraille 类似,但我发现跟踪它的工作原理更容易一些:
class Array
def median
sorted = self.sort
half_len = (sorted.length / 2.0).ceil
(sorted[half_len-1] + sorted[-half_len]) / 2.0
end
end
Run Code Online (Sandbox Code Playgroud)
half_len = 直到并包括(对于具有奇数个项目的数组)数组中间的元素数。
更简单:
class Array
def median
sorted = self.sort
mid = (sorted.length - 1) / 2.0
(sorted[mid.floor] + sorted[mid.ceil]) / 2.0
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28296 次 |
| 最近记录: |