题目连接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
思路:动态规划。设置两个值为own和empty,分别表示第i天手上持有股票和没有股票。第i天手上持有股票时,如果前一天手上持有股票,那么own保持不变;如果前一天没有股票,那么own等于前一天没有持有股票的金额再扣去买了当天股票的价格。第i天手上没有股票时,如果前一天有股票,那么这天就将股票卖出了,empty等于前一天利润加上当天股票价格;如果前一天没有股票,那么empty保持不变
代码:
class Solution { public int maxProfit(int[] prices, int fee) { int own = -prices[0], empty = 0; //第0天,若持有股票,那么利润为own=-prices[i];不持有股票就empty=0; for(int i=1; i<prices.length; i++){ own = Math.max(own, empty - prices[i]);//第i天持有股票时的最大利润 empty = Math.max(empty, own + prices[i] - fee);//第i天没有持有股票时的最大利润 } return empty;//最后手上一定没有股票 } }
执行用时:4 ms, 在所有 Java 提交中击败了99.77%的用户
内存消耗:47.6 MB, 在所有 Java 提交中击败了69.68%的用户