Ruby 试图理解嵌套的.每个循环
我的任务: 实现一种方法“股票选择器”,它接收一系列股票价格,每假设一天一个。它应该返回一对代表最佳买入日和最佳卖出日的天数。天从0开始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
> 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}