题目描述

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格;非负整数 fee 代表了交易股票的手续费用。
可以无限次交易(一笔交易指的是买入持有并卖出股票的过程),但每次交易都需要支付一笔手续费。
如果你已经购买了一个股票,在卖出它之前不能再继续购买股票了。
返回获得利润的最大值。

思路

参考自:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/solution/dong-tai-gui-hua-by-liweiwei1419-6/

第一步:状态定义
dp[i][j] 表示 [0, i] 区间内,到第 i 天(从 0 开始)状态为 j 时的最大收益。
这里 j 取两个值:

  • 0:不持股
  • 1:持股

第二步:状态转移方程

  • dp[i][0] :第 i 天不持股,可能是第 i - 1 天就不持股,也可能是第 i - 1天持股然后第 i 天刚卖出了dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - pee + prices[i])

  • dp[i][1]:第 i 天持股,可能是第 i - 1 天就持股,也可能是第 i - 1天不持股然后第 i 天刚买入dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i])

  • 规定手续费在卖出的时候扣除

第三步:思考初始化

  • dp[0][0] = 0;
  • dp[0][1] = -1 * prices[0]

第四步:考虑输出

  • 每一天都由前面几天的状态转换而来,最优值在最后一天,并且是不持股的状态。

代码


时间复杂度: O(N),N是股价数组的长度
空间复杂度: O(N),状态数组有 N行 2列,2 为常数,在计算复杂度时视为1.

第五步:思考状态压缩
因为当前行总是参考上一行的值,可以使用滚动数组优化。
并且还注意到当前行是参考另一张表格上一行的值,因此直接把第一维砍掉都可以,并且计算状态的时候,因为是“螺旋”计算的,在状态转移的时候,这两行的顺序可以互换。

优化代码

力扣小白刷题之714题买卖股票的最佳时机含手续费相关推荐

  1. 714. [C++]买卖股票的最佳时机含手续费

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

  2. 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树

    文章目录 738. 单调递增的数字 思路 难点:遍历顺序 难点:设置flag 714. 买卖股票的最佳时机含手续费 贪心思路 难点 968. 监控二叉树 思路 难点:如何隔两个节点放一个摄像头 738 ...

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

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

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

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

  5. 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 贪心算法 二[ ...

  6. 力扣算法JS LC [714. 买卖股票的最佳时机含手续费] LC [968. 监控二叉树]

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

  7. leetcode(力扣)738. 单调递增的数字||714. 买卖股票的最佳时机含手续费

    738. 单调递增的数字 class Solution { public:int monotoneIncreasingDigits(int n) {string strNum=to_string(n) ...

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

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

  9. 714. 买卖股票的最佳时机含手续费(CPP)

    714. 买卖股票的最佳时机含手续费 给定一个整数数组 pricespricesprices,其中第 iii 个元素代表了第 iii 天的股票价格 :非负整数 feefeefee 代表了交易股票的手续 ...

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

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

最新文章

  1. 11个让你吃惊的Linux终端命令
  2. Spring 注解之@RestController与@Controller的区别
  3. bcc Reference Guide 中文翻译
  4. GoWeb开发_Iris框架讲解(三):路由功能处理方式
  5. 自动关机脚本2007-10-28 10:04@ECHO off
  6. 收入和贷款有什么关系?
  7. C# 数据类型及相互转换及常用基础
  8. spring mvc学习(40):restful的crud实现增加方式
  9. 什么是spooling技术 他有哪几部分组成_气调保鲜冷库有哪几部分组成?
  10. java版如何使区块常加载,Java类加载机制 - suer27zhu的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. c语言的api_为什么C语言依然是必学的编程语言?
  12. 为什么HierachyViewer无法连接真机调试
  13. 简单新闻客户端APP设计
  14. Windows10卸载密钥导致win10未激活--解决
  15. 将m个相同的球全部放到n个相同的盒子里面有几种放法
  16. 【日常实用篇】解决2345压缩软件自带的流氓广告
  17. Excel导入后的后台响应数据前端已经接收但是响应不出来
  18. HTML jQuery实现点赞功能(模仿CSDN的样式)
  19. 【微信小程序常识】如何发布微信小程序体验版
  20. 命不好,因为你同床共枕的人

热门文章

  1. smartupload 路径不存在_使用jspSmartUpload.jar上传图片的路径问题
  2. iPhone更新失败后如何恢复数据
  3. 如何利用自动营销,来助力企业举办线下活动?
  4. flash builder增加flash设计效果
  5. i12蓝牙耳机充电仓怎么看充满电_车行蓝牙耳机价格高性价比的选择
  6. 2022年质量团队发展规划(软件测试方向)
  7. Java熟食包点系统实战
  8. Spring AOP代理详解
  9. 苹果nfc功能怎么开启_iOS 13系统中NFC标签已现身,苹果iPhone如何开启NFC功能?
  10. Lua的闭包到底是什么?到底有什么用?