Ruby 试图理解嵌套的.每个循环

Ruby 试图理解嵌套的.每个循环,ruby,Ruby,我的任务: 实现一种方法“股票选择器”,它接收一系列股票价格,每假设一天一个。它应该返回一对代表最佳买入日和最佳卖出日的天数。天从0开始 > stock_picker([17,3,6,9,15,8,6,1,10]) => [1,4] # for a profit of $15 - $3 == $12 快速提示: 你需要先买再卖 注意边缘情况,如最低的一天是最后一天或最高的一天是第一天 我的代码: def stock_picker(array) largest = 0 sma

我的任务:

实现一种方法“股票选择器”,它接收一系列股票价格,每假设一天一个。它应该返回一对代表最佳买入日和最佳卖出日的天数。天从0开始

> stock_picker([17,3,6,9,15,8,6,1,10])
=> [1,4]  # for a profit of $15 - $3 == $12
快速提示:

  • 你需要先买再卖
  • 注意边缘情况,如最低的一天是最后一天或最高的一天是第一天
我的代码:

def stock_picker(array)

largest = 0
smallest = 1000
largest_index = 1
smallest_index = 0

array.each { |small| 

array.each { |large| 

if small < smallest && array.index(small) < largest_index

        smallest = small
        smallest_index = array.index(small)
    #puts 'smallest = ' + smallest.to_s

end
if large > largest && array.index(large) > smallest_index 

        largest = large
        largest_index = array.index(large)
    #puts "largest = " + largest.to_s
end


    }
}

 [smallest_index, largest_index]

end
p stock_picker([17,3,6,9,15,8,6,1,10])
p stock_picker([4,6,9,34,28,12,2,16,8,44])
p stock_picker([8, 5, 3, 6 ,8, 56, 43, 76, 54, 9])
p stock_picker([6, 2, 7, 3, 1, 7, 3, 8, 4, 9])
p stock_picker([99, 88, 77, 66, 55, 44, 33, 22, 11, 99])
def stock_选择器(阵列)
最大值=0
最小值=1000
最大指数=1
最小指数=0
array.each{| small |
array.each{大}
如果small<最小和数组索引(small)<最大索引
最小的=小的
最小索引=数组。索引(小)
#将'minimate='+minimate.to_
结束
如果大>最大&&array.index(大)>最小的索引
最大的=大的
最大索引=数组。索引(大)
#将“最大的=”+最大的
结束
}
}
[最小指数,最大指数]
结束
p库存选择器([17,3,6,9,15,8,6,1,10])
p库存选择器([4,6,9,34,28,12,2,16,8,44])
p股票选择器([8,5,3,6,8,56,43,76,54,9])
p股票选择器([6,2,7,3,1,7,3,8,4,9])
p股票选择器([99,88,77,66,55,44,33,22,11,99])
我的代码在前4个测试中有效,但在最后一个测试中却停留在[0,1]上。 我不明白为什么嵌套。每个都不会迭代超过指定的值。如果我更改最后一个'99',它运行良好


有人能解释一下我做错了什么吗?

给定的每日价格如下:

prices = [17, 3, 6, 9, 15, 8, 6, 1, 10]
0
天的价格为
17
,第
1
天的价格为
3
,依此类推。我假设一只股票可以在同一天买卖


第一步是确定,对于每个可能的“购买”日
i
0我给你一些提示:1)
Array。index
只会找到第一次出现的。如果有多个引用(例如99两次),则只查找前99个。2) 您可能希望使用方法
Array.each\u,而不是
Array.each
。这将消除调用
数组.index
的需要,您在这里无论如何都不能使用它,因为它不适用于多次出现。哦,很好,它是在hackerrank还是其他网站上?你能链接到它吗?@Casper非常感谢你的回复。这正是我理解我的问题所需要知道的。我在回答中没有发现OP代码的问题,因为@Casper在对问题的评论中这样做了。谢谢你的回答。知道这一点很好,但正如你上面所说,卡斯珀指出了我的错误。
returns = prices.each_index.map do |i|
  j = (i..prices.size-1).max_by { |j| prices[j] }
  { buy_day: i, sell_day: j, return: prices[j]-prices[i] }
end
  #=> [{:buy_day=>0, :sell_day=>0, :return=>0},
  #    {:buy_day=>1, :sell_day=>4, :return=>12},
  #    {:buy_day=>2, :sell_day=>4, :return=>9},
  #    {:buy_day=>3, :sell_day=>4, :return=>6},
  #    {:buy_day=>4, :sell_day=>4, :return=>0},
  #    {:buy_day=>5, :sell_day=>8, :return=>2},
  #    {:buy_day=>6, :sell_day=>8, :return=>4},
  #    {:buy_day=>7, :sell_day=>8, :return=>9},
  #    {:buy_day=>8, :sell_day=>8, :return=>0}] 
h = returns.max_by { |h| h[:return] }
  #=> {:buy_day=>1, :sell_day=>4, :return=>12}