出售股票的最大利润

时间:2018-09-03 15:46:31

标签: java algorithm

您的算法已经很好地预测市场了,您现在知道木制橙牙签公司(WOT)在未来几天的股价将是什么。

每天,您可以购买一股WOT,出售您拥有的任意数量的WOT股票,或者根本不进行任何交易。最佳交易策略可获得的最大利润是多少?

例如,如果您知道接下来两天的价格为price = [1,2],则应该在第一天买入一股股票,然后在第二天卖出,以赚取1的利润。如果相反,则为[2] ,1],无法获利,所以那几天您不会买卖股票。

样本输入

3

3

5 3 2

3

1 2 100

4

1 3 1 2

样本输出

0

197

3

我的代码是:

static int stockmax(int[] prices) {
  int temp[][]=new int[prices.length][prices.length];
    int max;
    int sum=0;
    for(int i=0;i<prices.length;i++)
    {
        max=0;
        for(int j=0;j<prices.length;j++)
        {
            if(j<=i)
            {
                temp[i][j]=0;
            }
            else{
                temp[i][j]=prices[j]-prices[i];
            }
            if(temp[i][j]>max)
                max=temp[i][j];
        }
        sum+=max;
    }
    return sum;
}

我对这个问题的回答不正确。谁能说出这段代码为什么错误?

1 个答案:

答案 0 :(得分:1)

很明显,对于我们能买到的任何价格,我们都想以最高价出售。幸运的是,我们获得了最高的价格。因此,向后迭代,我们知道在旅行中“时光倒流”的任何时候看到的最高未来价格。

Python代码:

def stockmax(prices):
  n = len(prices)
  highest = prices[n - 1]
  m = [0] * n

  # Travel back in time,
  # deciding whether to buy or not
  for i in xrange(n - 2, -1, -1):

    # The most profit buying stock at this point
    # is what we may have made the next day
    # (which is stored in m[i + 1])
    # and what we could make if we bought today
    m[i] = m[i + 1] + max(
      # buy
      highest - prices[i],
      # don't buy
      0
    )

    # Update the highest "future price"
    highest = max(highest, prices[i])

  return m[0]