现在我有
def min(array,starting,ending)
minimum = starting
for i in starting+1 ..ending
if array[i]<array[minimum]
minimum = i
end
end
return minimum
end
Ruby中有更好的“实现”吗?这个仍然看起来像c-ish。 感谢。
答案 0 :(得分:6)
如果要查找最小元素的索引,可以使用Enumerable#enum_for
获取一个项目索引对的数组,并找到Enumerable#min
的最小值(这也是原始数组的最小值)。
% irb
irb> require 'enumerator'
#=> true
irb> array = %w{ the quick brown fox jumped over the lazy dog }
#=> ["the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
irb> array.enum_for(:each_with_index).min
#=> ["brown", 2]
如果要将其绑定到特定的数组索引:
irb> start = 3
#=> 3
irb> stop = 7
#=> 7
irb> array[start..stop].enum_for(:each_with_index).min
#=> ["fox", 0]
irb> array[start..stop].enum_for(:each_with_index).min.last + start
#=> 3
答案 1 :(得分:1)
基本上这是你能做的最好的,虽然你可以更简洁地写一下:
def minval(arr)
arr.inject {|acc,x| (acc && acc < x ? acc : x)}
end
答案 2 :(得分:1)
有一种更简单的方法,它在ruby 1.9.2中适用于我:
a = [6, 9, 5, 3, 0, 6]
a.find_index a.min
答案 3 :(得分:0)
这是查找数组中最小元素的标准算法,通过在调用此函数之前对数组进行排序可以更好。
否则我找不到更有效的方法。具体来说,大O表示法中的线性时间是我们能做的最好的。
答案 4 :(得分:-1)
如果这不仅仅是一个学术问题,为什么不使用Ruby的原生sort
方法呢?它是使用快速排序算法实现的,并且被认为非常快。
a = [3, 4, 5, 1, 7, 5]
a.sort![0] # => 1