我将使用此算法来解决问题:
将第一个和第二个最小值初始化为INT_MAX
。
first = second = INT_MAX
循环遍历所有元素。一个。如果当前元素小于第一个元素,则更新第一个和第二个元素。湾否则,如果当前元素小于第二个元素,则更新第二个元素。
这是我的代码:
#finds second smallest element's index in list
def secondSmallest(list)
first = FIXNUM_MAX
second = FIXNUM_MAX
list.each_with_index do |item, index|
if item < first
second = first
first = index
elsif item < second
second = index
end
end
return second
end
我没有得到我期望的输出。我不知道我哪里出错了。
答案 0 :(得分:3)
您将索引存储在第一个和第二个中。因此,您不能将它们用于价值比较:item < second
我想你需要的是4个变量:maxVal,maxValIndex,minVal,minValIndex如果你要按照上面提到的方法。
答案 1 :(得分:1)
我认为你可以借助ruby iterators
在一行中做到这一点 list.index(list.sort.second)