首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在选股练习中减少方法?

在选股练习中减少方法?
EN

Stack Overflow用户
提问于 2021-12-22 13:03:06
回答 1查看 160关注 0票数 1

这个问题给出了一个数组,其中每个指数都是每天的股票价格:

代码语言:javascript
运行
复制
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美元卖出)。要做到这一点,我使用了约简方法,它工作得很好,但我被告知我没有正确地使用约简方法。

代码语言:javascript
运行
复制
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数组并每次移动?

EN

回答 1

Stack Overflow用户

发布于 2021-12-22 13:31:58

不确定减少方法问题,但也许可以考虑一次通过的解决方案,这不需要任何复制:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70449508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档