买卖股票系列:

  • 【必备算法】动态规划:一个思路解决六道股票问题
  • 【必备算法】动态规划:LeetCode题(七)121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II
  • 【必备算法】动态规划:LeetCode题(八)121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II
  • 【必备算法】动态规划:LeetCode题(九)309. 最佳买卖股票时机含冷冻期,714. 买卖股票的最佳含手续费

309. 最佳买卖股票时机含冷冻期²

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

示例:

输入: [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
public int maxProfit(int[] prices) {int n = prices.length;if (n < 2) return 0;// 状态定义// 注:与前面的122题一样,不限次数,二维状态就够了int[][] mp = new int[n][2];// 初始状态mp[0][0] = 0;mp[0][1] = -prices[0];// 状态递推// dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);// dp[i][1] = Math.max(dp[i - 1][1], dp[i - 2][0] - prices[i]);for (int i = 1; i < n; i++) {mp[i][0] = Math.max(mp[i-1][0], mp[i-1][1] + prices[i]);mp[i][1] = Math.max(mp[i-1][1], (i >= 2 ? mp[i-2][0] : 0) - prices[i]); // 前两天买时直接买}// 最终状态return mp[n-1][0];}

714. 买卖股票的最佳含手续费²

给定一个整数数组 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.

注意:

public int maxProfit(int[] prices, int fee) {int n = prices.length;if (n < 2) return 0;// 状态定义// 注:与前面的122题一样,不限次数,二维状态就够了int[][] mp = new int[n][2];// 初始状态mp[0][0] = 0;mp[0][1] = -prices[0];// 状态递推// dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i] -fee);// dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]);for (int i = 1; i < n; i++) {mp[i][0] = Math.max(mp[i-1][0], mp[i-1][1] + prices[i] - fee); // 与前面122题的区别就在于卖出股票后要收个feemp[i][1] = Math.max(mp[i-1][1], mp[i-1][0] - prices[i]);}// 最终状态return mp[n-1][0];}

可以将上面的状态数组优化成两个状态变量,因为在上面递推的过程中,所需要的状态只有 mp[i-1][0]mp[i-1][1],从而空间复杂度可以从O(n)优化成O(1)。

 public int maxProfit(int[] prices) {int n = prices.length;if (n < 2) return 0;// 状态定义+初始状态int mp_0 = 0, mp_1 = -prices[0];// 状态递推for (int i = 1; i < n; i++) {int tmp = mp_0;mp_0 = Math.max(mp_0, mp_1 + prices[i] -fee); // -feemp_1 = Math.max(mp_1, - prices[i]);}// 最终状态return mp_0;}

【必备算法】动态规划:LeetCode题(九)309. 最佳买卖股票时机含冷冻期,714. 买卖股票的最佳含手续费相关推荐

  1. 【第51天| 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 】

    309.最佳买卖股票时机含冷冻期 三个状态: 1. 当前持有股票状态1 2. 当前不持有股票,且不是今天卖出的股票状态2 3. 当前不持有股票, 且股票是今天卖出的状态3 题目要求前一天卖出了股票今天 ...

  2. 力扣记录:动态规划4股票问题——121,122,123,188 ,309,714买卖股票的最佳时机(I,II,III,IV,含冷冻期,含手续费)

    本次题目 121 买卖股票的最佳时机(只能买卖一次) 122 买卖股票的最佳时机II(可以买卖多次) 123 买卖股票的最佳时机III(最多买卖两次) 188 买卖股票的最佳时机IV(最多买卖k次) ...

  3. leetcode 309. Best Time to Buy and Sell Stock with Cooldown | 309. 最佳买卖股票时机含冷冻期(动态规划)

    题目 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/ 题解 我知道要dp,但是不知道要怎么dp ...

  4. LeetCode 309. 最佳买卖股票时机含冷冻期 | Python

    文章目录 309. 最佳买卖股票时机含冷冻期 题目 解题思路 代码实现 实现结果 欢迎关注 309. 最佳买卖股票时机含冷冻期 题目来源:力扣(LeetCode)https://leetcode-cn ...

  5. LeetCode:309. 最佳买卖股票时机含冷冻期(python)

    LeetCode:309. 最佳买卖股票时机含冷冻期(python) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能 ...

  6. 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期(Medium)(JAVA)

    [LeetCode]309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期(Medium)(JAVA) 题目地址: https: ...

  7. 动态规划——最优买卖股票时机含冷冻期(Leetcode 309)

    题目选自Leetcode 309. 最佳买卖股票时机含冷冻期 一种常用的方法是将「买入」和「卖出」分开进行考虑:「买入」为负收益,而「卖出」为正收益.在初入股市时,你只有「买入」的权利,只能获得负收益 ...

  8. 算法训练第五十一天 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票问题总结

    动态规划part12 309.最佳买卖股票时机含冷冻期 题目描述 思路 总结 714.买卖股票的最佳时机含手续费 题目描述 思路 股票问题总结 309.最佳买卖股票时机含冷冻期 题目链接:309.最佳 ...

  9. 力扣刷题day44|309最佳买卖股票时机含冷冻期、714买卖股票的最佳时机含手续费

    文章目录 309. 最佳买卖股票时机含冷冻期 思路 动态规划五部曲 714. 买卖股票的最佳时机含手续费 贪心思路 难点 动态规划思路 动态规划五部曲 309. 最佳买卖股票时机含冷冻期 力扣题目链接 ...

最新文章

  1. 1280*720P和1920*1080P的视频在25帧30帧50帧60帧时的参数
  2. UA OPTI544 量子光学9 2-level system approximation的向量模型
  3. 自己使用window.open和window.showModalDialog在父子窗口传值的实践简单总结
  4. Redis高级数据结构原理解析-bitmap,hyperloglog
  5. 机器学习与R语言(原书第2版)》一1.4 实践中的机器学习
  6. java虚拟机(JVM)的内存设置
  7. 离人计算机乐谱,离人简谱 林志炫离人挥霍着眼泪,回避还在眼前的离别
  8. 数据库系统原理简答题、论述题、判断题
  9. Repository HDU - 2846 (trie)
  10. 【Python刷题篇】——Python机器学习-鸢尾花分类
  11. ipa安装失败,以及安装办法
  12. win8.1安装密钥
  13. Stata Journal 2001-2019年全部期刊目录及下载链接
  14. discuz发帖流程_C#代码、流程discuz论坛批量或自动发帖
  15. 【老九学堂】【C++】CodeBlocks安装配置
  16. AutoCAD Electrical(ACE)的基本操作——画布与新建圆、直线
  17. 华为 Mate 30 和 iPhone 11 最突出的差异:WiFi 6 和 5G 谁更“香”?
  18. 「DaoCloud 道客」云原生一体机:开箱即用,轻松上云
  19. 乐高大颗粒作品16:跑步机
  20. 主成分分析——PCA降维Python实现及碎石图

热门文章

  1. java stream()操作
  2. 国内十大互联网黄金交易平台排名
  3. 【深度学习】cs231n计算机视觉 SVM分类器
  4. python 病毒脚本_python实现集中式的病毒扫描功能详解
  5. 文件预览格式太多 前端需要很多插件,有了这一个就够了,kkFileView支持doc,docx,Excel,pdf,txt,zip,rar,图片等等
  6. Pandas库常用知识记录
  7. 如何通过自助数据分析实现精准营销?
  8. linux socket inet_addr,linux c socket ip地址字符串数字转换 inet_addr inet_ntoa
  9. Android系统签名简介
  10. 福利 | Hadoop权威指南(中文)第四版