这个问题给出了一个数组,其中每个指数都是每天的股票价格:
array = [17,3,6,9,15,8,6,1,10]
例如,11月1日的价格是17美元,11月2日的价格是3美元,11月3日的价格是6美元等等。
我得找最好的日子买和卖,所以它应该返回#{buy_day},#{sell_day}
在这种情况下,正确的答案是1,4美元,利润为12美元(以3美元买入,以15美元卖出)。要做到这一点,我使用了约简方法,它工作得很好,但我被告知我没有正确地使用约简方法。
stock = [17,3,6,9,15,8,6,1,10]
stocks_new = [17,3,6,9,15,8,6,1,10]
best_profit = 0
days = []
stock.length.times do |day|
stocks_new.reduce do |acc, val|
acc = stocks_new[0]
profit = val - acc
if profit > best_profit
best_profit = profit
days = [stock.index(acc), stock.index(val)]
end
end
stocks_new.shift
end
我首先将数组复制到另一个变量(stocks_new)上,然后在每个循环的末尾移动。我这样做是为了避免在迭代过程中从累加器后面开始使用val中的val。
是否有一种方法可以在每次迭代中从acc +1索引开始,从而不必创建这个stocks_new数组并每次移动?
发布于 2021-12-22 13:31:58
不确定减少方法问题,但也许可以考虑一次通过的解决方案,这不需要任何复制:
def max_profit(stock)
min_price = (1 << 31) - 1 # stock.max
max_profit = 0
min_day_index = 0
sell_day = 0
buy_day = 0
stock.each_with_index do |price, day_index|
if price < min_price
min_price = price
min_day_index = day_index
end
profit = price - min_price
if profit > max_profit
max_profit = profit
sell_day = day_index
buy_day = min_day_index
end
end
max_profit > 0 ? [buy_day, sell_day] : "Cannot make profit"
end
https://stackoverflow.com/questions/70449508
复制相似问题