动态规划|714.买卖股票的最佳时机含手续费

力扣题目链接

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        int n = prices.size();
        vector<vector<int>> dp(n, vector<int>(2, 0));
        dp[0][0] -= prices[0]; // 持股票
        for (int i = 1; i < n; i++) {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);
        }
        return max(dp[n - 1][0], dp[n - 1][1]);
    }
};

思路

本题贪心解法:贪心算法:买卖股票的最佳时机含手续费(opens new window)

性能是:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

本题使用贪心算法并不好理解,也很容易出错,那么我们再来看看是使用动规的方法如何解题。

相对于动态规划:122.买卖股票的最佳时机II (opens new window),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。

唯一差别在于递推公式部分,所以本篇也就不按照动规五部曲详细讲解了,主要讲解一下递推公式部分。

这里重申一下dp数组的含义:

dp[i][0] 表示第i天持有股票所省最多现金。 dp[i][1] 表示第i天不持有股票所得最多现金

如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来

  • 第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0]
  • 第i天买入股票,所得现金就是昨天不持有股票的所得现金减去 今天的股票价格 即:dp[i - 1][1] - prices[i]

所以:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);

在来看看如果第i天不持有股票即dp[i][1]的情况, 依然可以由两个状态推出来

  • 第i-1天就不持有股票,那么就保持现状,所得现金就是昨天不持有股票的所得现金 即:dp[i - 1][1]
  • 第i天卖出股票,所得现金就是按照今天股票价格卖出后所得现金,注意这里需要有手续费了即:dp[i - 1][0] + prices[i] - fee

所以:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);

本题和动态规划:122.买卖股票的最佳时机II (opens new window)的区别就是这里需要多一个减去手续费的操作

代码随想录 (programmercarl.com)

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 00:12:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 00:12:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 00:12:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 00:12:02       20 阅读

热门阅读

  1. Docker 备忘清单(一)

    2024-04-29 00:12:02       12 阅读
  2. ts和js的区别

    2024-04-29 00:12:02       12 阅读
  3. 实验报告4-MyBatis与Spring的整合

    2024-04-29 00:12:02       12 阅读
  4. Fiddlers使用

    2024-04-29 00:12:02       13 阅读
  5. Android Native Hook: 原理、方案对比与具体实现

    2024-04-29 00:12:02       12 阅读
  6. 将mysql转为oracle

    2024-04-29 00:12:02       13 阅读
  7. LeetCode题练习与总结:组合-77

    2024-04-29 00:12:02       11 阅读
  8. new qemu QEMU_OPTION_d

    2024-04-29 00:12:02       13 阅读
  9. 笨蛋学C++【C++基础第八弹】

    2024-04-29 00:12:02       13 阅读