您的算法已经很好地预测市场了,您现在知道木制橙牙签公司(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;
}
我对这个问题的回答不正确。谁能说出这段代码为什么错误?
答案 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]