买卖收益最大(未完成)

2019-10-18  本文已影响0人  Robin92

给定比特币n天内的价格表,完成一个算法计算你通过买卖能获得的最大收益。要求考虑执行效率。

(你不能在第一次买入前卖出,而且一次买或者卖只能是一份,买卖次数不限,但你必须在再次购买前卖掉之前买入的比特币。)

a. 请写出编程思路

b. 请编码实现

举例:

价格表: [5,3,1,5,4,7,8,6]

输出: 8

解释: 第3天(价格1)买,第4天(价格5)卖, 收益4 ;然后第5天(价格4)买,第7天(价格8)的时候卖出, 收益4 ;总共收益8。

思路:

状态

有 买入(buy) 和 卖出(sell) 这两种状态。

转移方程

当天买的话意味着损失-prices[i],当天卖的话意味着增加prices[i],当天卖出总的收益就是 buy+prices[i]

可以有无限次的买入和卖出,也就是说买入状态之前可拥有卖出状态,所以转移方程:

buy = max(buy, sell - price[i])

sell = max(sell, buy + prices[i] )

边界

第一天 buy = -prices[0], sell = 0,最后返回 sell 即可。

实现:

public int maxProfit(int[] prices) {

        if (prices.length <= 1)

            return 0;

        int buy = -prices[0], sell = 0;

        for (int i = 1; i < prices.length; i++) {

            buy = Math.max(buy, -prices[i]);

            sell = Math.max(sell, prices[i] + buy);

        }

        return sell;

    }
上一篇 下一篇

猜你喜欢

热点阅读