1. 买卖股票的最佳时机含手续费

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值。

注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

示例 1:

输入: prices = [1, 3, 2, 8, 4, 9], fee = 2
输出: 8
解释: 能够达到的最大利润:
在此处买入 prices[0] = 1
在此处卖出 prices[3] = 8
在此处买入 prices[4] = 4
在此处卖出 prices[5] = 9
总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.

注意:

0 < prices.length <= 50000.
0 < prices[i] < 50000.
0 <= fee < 50000.

题解:

很有趣的题目,这种类似的题目比较常见,通过数据量可以看出只能通过一层循环解决,也就是常见的前面的结果推导至后面的影响,和直接的区间DP不太一样,区间DP有多层循环处理。

题目难点在于何时买入何时卖出,于是针对每天的股票有两种操作,买入或者卖出,于是我们定义数组dp[maxn][2],dp[i][0]表示第0-i天的股票最后一天卖出得到的最大收益,dp[i][1]表示第0-i天的股票最后一天买入得到的最大收益,于是转移方程如下:

        dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee);//要不要卖出dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);//要不要买入

解释一下,因为只有第i-1天先买入了第i天才能卖出,但是不一定卖出了就能赚的更多,于是我可能不需要卖出,那就保持第i-1天卖出的状态,于是需要比较dp[i-1][0]和dp[i-1][1]+prices[i]-fee的大小,同理,只有第i-1天卖出了,我才能重新买入,但是不一定买入了能赚更多,于是保持上一天买入的状态。

AC代码:

class Solution {public:int dp[50010][2];//dp[x][0]表示卖出,dp[x][1]表示买入int maxProfit(vector<int>& prices, int fee) {memset(dp,0,sizeof(dp));dp[0][0]=0,dp[0][1]=-prices[0];//买入花钱,卖出赚钱for(int i=1;i<prices.size();i++){dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee);//要不要卖出dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);//要不要买入}return dp[prices.size()-1][0];}
};

LeetCode 714. 买卖股票的最佳时机含手续费--动态规划相关推荐

  1. leetcode 714 买卖股票的最佳时机含手续费-动态规划(中等)

    714 买卖股票的最佳时机含手续费-动态规划(中等) 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :非负整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交 ...

  2. 110. Leetcode 714. 买卖股票的最佳时机含手续费 (动态规划-股票交易)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]是一个长度为len(prices)的一维数组,表示的是在第i天持有股票 步骤二.推断状态方程: 第i天不持有股票,即dp[i][0], 那么两个状 ...

  3. 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树

    LeetCode 714 买卖股票的最佳时机含手续费 (中等) 题目 描述 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你 ...

  4. 【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费

    [贪心算法]Leetcode 714. 买卖股票的最佳时机含手续费 题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. ...

  5. LeetCode 714 买卖股票的最佳时机含手续费

    714. 买卖股票的最佳时机含手续费 题目 思路 过一遍,记录第i天是否买入和卖出的最值. 代码 class Solution {public:int maxProfit(vector<int& ...

  6. LeetCode·714.买卖股票的最佳时机含手续费·贪心

    作者:xun-ge-v 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/sol ...

  7. leetcode 714. 买卖股票的最佳时机含手续费(dp)

    给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :非负整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都需要付手续费.如果你已经购买了一个 ...

  8. leetcode 714. 买卖股票的最佳时机含手续费(java)

    贪心!!! class Solution {public int maxProfit(int[] prices, int fee) {int n = prices.length;int buy = p ...

  9. 模拟卷Leetcode【普通】714. 买卖股票的最佳时机含手续费

    714. 买卖股票的最佳时机含手续费 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都 ...

  10. Leetcode刷题笔记 714. 买卖股票的最佳时机含手续费

    714. 买卖股票的最佳时机含手续费 时间:2020年12月17日 知识点:动态规划 题目链接:https://leetcode-cn.com/problems/best-time-to-buy-an ...

最新文章

  1. Java中的位运算符、移位运算
  2. Selenium webdriver中的xpath定位
  3. C语言课后习题(47)
  4. 年味十足的手绘年画风新年春节海报PSD模板
  5. win11扩展任务栏没东西怎么办 windows11扩展任务栏没东西的解决方法
  6. c ++中哈希表如何访问_C / C ++中的哈希表–完整的实现
  7. CSS入门学习笔记+案例
  8. Java实现贪吃蛇(汪汪队)游戏,自定义游戏背景音乐,背景图片和游戏图标
  9. JTT808/1078管理平台发布
  10. linux一些不要想当然的事(一)之目录权限
  11. 软件测试管理工具——禅道(安装、讲解)
  12. vb安装过程中 ntvdm.exe[9696]中发生未处理的win32异常
  13. 新能源汽车应该何去何从?
  14. Hadoop 如何退出安全模式
  15. 状态机设计模式(java中的使用)
  16. BERT模型—1.BERT模型架构
  17. ARMv7中 KVM对虚拟化的实现(中篇)
  18. pe备份linux系统教程,如何使用老毛桃winpe的Bootice工具备份SYSLINUX引导程序?
  19. 安森美为何「上热搜」?汽车业务增量背后的隐忧已经出现
  20. ✈️从0到1打造直播 App(iOS /Android直播流程介绍整理 <mark>)

热门文章

  1. 热敏打印机数据截取+追加打印二维码
  2. # 量子力学中叠加态、本征态、混合态、纯态、纠缠态、直积态的区别(百度整理来的)
  3. python-pygame实现飞机大战-2-添加敌机以及碰撞爆炸
  4. 开启Win7快速启动栏
  5. KUI-金山界面库 自定义消息
  6. android弹球动画,FlingAnimation/SpringAnimation实现弹球动画
  7. 您选择的分区不支持无损调整容量操作
  8. latex制作幻灯片模板
  9. 《STL源码剖析》--memery
  10. 【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态