题目

难度:★★★☆☆

类型:数组

方法:动态规划

力扣链接请移步本题传送门

更多力扣中等题的解决方案请移步力扣中等题目录

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

解答

一维数组类的问题常用动态规划解决。

【定义数组】

由于状态转移时只需要用到上一个状态,因此可以把一维的数组压缩成零维,定义变量cash和hold,用于表示当前尚未持有股票和当前持有股票状态下的累计最大收益。

【初始状态】

第一天尚未持有股票状态,当前累计收益为零,记为cash=0;

第一天持有股票。当前累计收益为-price[0],记为hold=-price[0];

【状态转移】

对于之后的每一天:

如果这一天是没有持有股票的状态,那么可能是因为:

(1)最近几天都没有持有股票,这时累计收益继承cash;

(2)刚刚卖出这一天的股票,这时累计收益为hold + prices[i] - fee;

从以上两者中选取最大值,更新当前cash变量。

如果这一天是持有股票状态,可能的原因为:

(1)最近几天都持有这一股票,当前累计收益继承hold;

(2)刚刚买入这一天的股票,这时累计收益为cash - price[i];

从以上两者中选取最大值,更新当前的hold变量。

【最终状态】

最后,我们返回cash的值即可,因为截至时刻股票一定是卖出的。

我们可以发现,这道动态规划题的特点是,我们定义了两个状态,两个状态之间之间存在着信息交互。

class Solution(object):

def maxProfit(self, prices, fee):

cash, hold = 0, -prices[0]

for i in range(1, len(prices)):

cash = max(cash, hold + prices[i] - fee)

hold = max(hold, cash - prices[i])

return cash

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

python股票买卖问题_714. 买卖股票的最佳时机含手续费(Python)相关推荐

  1. 【LeetCode股票买卖系列:714. 买卖股票的最佳时机含手续费 | 暴力递归=>记忆化搜索=>动态规划】

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

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

  3. 【LeetCode】买卖股票的最佳时机含手续费 [M](动态规划)

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

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

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

  5. LeetCode714:买卖股票的最佳时机含手续费

    该题目和以下题目相关联,感兴趣的小伙伴可直接点击下面的链接! LeetCode121:买卖股票的最佳时机 LeetCode122:买卖股票的最佳时机 II LeetCode123:买卖股票的最佳时机 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 我的工具箱(不定期更新,欢迎跟帖推荐)
  2. Python编程基础16:类和对象
  3. 精通javascript笔记(智能社)——数字时钟
  4. 火星舱如何备份oracle_倒计时!火星,我们来了
  5. php 批量改文件夹名,如何批量更改文件名(终极解决方案)
  6. 计算机蓝屏 代码0000a,win7 64位系统蓝屏代码0x0000000a的原因及解决方法
  7. Matlab导出高DPI图像——生成高分辨率.eps .tiff .jpg图像的方法
  8. Linux修改MySQL数据库密码
  9. python主函数怎么写_类中的Python主函数
  10. Vue 使用vue-json-excel 实现导出Excel
  11. 龚鹏:我是怎么从程序员成为全栈GEEK的
  12. 优麒麟系统安装MySQL_安装优麒麟(ubuntukylin)操作系统详解
  13. matlab去除红眼代码及详细介绍
  14. C语言程序的特点及设计思想
  15. 初识DataBinding路上的坎
  16. 今日金融词汇---配股,是什么?
  17. 阿里巴巴集团主席马云演讲实录(图)
  18. RSA初探,聊聊怎么破解HTTPS
  19. Adobe系列安装问题汇总,遇到这些问题该怎么办
  20. 推荐一个智能的 Java 爬虫框架

热门文章

  1. 报考上传照片时显示服务器错误,报考上传照片所遇问题及解决方法(转载)
  2. chris 英语4年级下阶段性总结
  3. steam的游戏id怎么查?
  4. 用python刷微信投票_微信投票知道 微信刷票能否python抓取微信投票_大师网络投票刷票网...
  5. 2021绍兴市大学生程序设计竞赛邀请赛题解
  6. MySQL分库分表dble初次尝试
  7. 山西等保测评机构项目测评收费价格标准参考
  8. 研发管理学习笔记1-研发管理的目标是什么
  9. 恒指期货高手背后的辛酸付出谁又能懂
  10. 面试官:请实现单行文本居中,多行文本左对齐?