在列表中查找第二个最小元素的索引

时间:2017-11-02 04:25:29

标签: ruby

我将使用此算法来解决问题:

  1. 将第一个和第二个最小值初始化为INT_MAX

    first = second = INT_MAX
    
  2. 循环遍历所有元素。一个。如果当前元素小于第一个元素,则更新第一个和第二个元素。湾否则,如果当前元素小于第二个元素,则更新第二个元素。

  3. 这是我的代码:

    #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
    

    我没有得到我期望的输出。我不知道我哪里出错了。

2 个答案:

答案 0 :(得分:3)

您将索引存储在第一个和第二个中。因此,您不能将它们用于价值比较:item < second 我想你需要的是4个变量:maxVal,maxValIndex,minVal,minValIndex如果你要按照上面提到的方法。

答案 1 :(得分:1)

我认为你可以借助ruby iterators

在一行中做到这一点

list.index(list.sort.second)