【发布时间】:2014-02-24 13:43:03
【问题描述】:
我编写了一些代码,它返回未排序的奇数数组的中值,但它不返回偶数数组的中值。
我知道为了找到偶数数组的中位数,你必须取数组的中间两个数,平均它们,这就是中位数。我无法将其翻译成可用的代码。除了这段代码明显冗长之外,问题似乎出在第 7-8 行,我不明白为什么。
我更喜欢提示而不是答案,但如果你更愿意发布一些固定的代码,我也可以接受。
def media(array)
sorted = array.sort
list = sorted.length
if list %2 != 0
(list + 1) / 2.0
else
even = ((list.to_f + 2) / 2) + ((list.to_f / 2)
return (even/2)
end
end
【问题讨论】:
-
jr,需要对
sorted的元素进行操作,而不是对它的长度进行操作。请注意,排序现在对您没有任何作用;list = array.length会产生相同的结果。您需要使用sorted。 -
对于奇数长度,您将返回中位数 index。对于偶数长度,没有可以返回的索引,对吗?因此重写它,以便它返回计算值。例如。对于奇数数组,返回
sorted[(list+1)/2],对于偶数数组,返回(sorted[i]+sorted[i-1])/2,您需要计算i。 -
您是要查找数组中的中位数value,还是排序后数组中位数的index?因为您的代码似乎正在尝试执行后者。
-
请记住,ruby 数组索引从零开始,因此当长度为奇数时,感兴趣的索引为
array.length / 2,如果长度为偶数,则为array.length / 2和(array.length / 2) - 1。 -
感谢这些有用。立即再次卡住 - 我不知道第二个答案中的代码发生了什么:'sorted[(list+1)/2]' and '(sorted[i]+sorted[i-1])/2 '。是否应该读作“排序时间列表 + 1,除以 2”和“排序时间 i + 排序时间 (i -1),然后除以 2”?