Loading

Leetcode714.买卖股票的最佳时机

题目连接: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%的用户
posted @ 2020-12-17 15:16  yoyuLiu  阅读(51)  评论(0编辑  收藏  举报