python股票买卖问题_714. 买卖股票的最佳时机含手续费(Python)
题目
难度:★★★☆☆
类型:数组
方法:动态规划
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
给定一个整数数组 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)相关推荐
- 【LeetCode股票买卖系列:714. 买卖股票的最佳时机含手续费 | 暴力递归=>记忆化搜索=>动态规划】
- leetcode 714 买卖股票的最佳时机含手续费-动态规划(中等)
714 买卖股票的最佳时机含手续费-动态规划(中等) 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :非负整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交 ...
- 【LeetCode】买卖股票的最佳时机含手续费 [M](动态规划)
714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode) 一.题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用 ...
- 714. 买卖股票的最佳时机含手续费(CPP)
714. 买卖股票的最佳时机含手续费 给定一个整数数组 pricespricesprices,其中第 iii 个元素代表了第 iii 天的股票价格 :非负整数 feefeefee 代表了交易股票的手续 ...
- LeetCode714:买卖股票的最佳时机含手续费
该题目和以下题目相关联,感兴趣的小伙伴可直接点击下面的链接! LeetCode121:买卖股票的最佳时机 LeetCode122:买卖股票的最佳时机 II LeetCode123:买卖股票的最佳时机 ...
- LeetCode 714 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费 题目 思路 过一遍,记录第i天是否买入和卖出的最值. 代码 class Solution {public:int maxProfit(vector<int& ...
- 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树
LeetCode 714 买卖股票的最佳时机含手续费 (中等) 题目 描述 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你 ...
- Leetcode刷题笔记 714. 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费 时间:2020年12月17日 知识点:动态规划 题目链接:https://leetcode-cn.com/problems/best-time-to-buy-an ...
- 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 贪心算法 二[ ...
- 模拟卷Leetcode【普通】714. 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都 ...
最新文章
- 我的工具箱(不定期更新,欢迎跟帖推荐)
- Python编程基础16:类和对象
- 精通javascript笔记(智能社)——数字时钟
- 火星舱如何备份oracle_倒计时!火星,我们来了
- php 批量改文件夹名,如何批量更改文件名(终极解决方案)
- 计算机蓝屏 代码0000a,win7 64位系统蓝屏代码0x0000000a的原因及解决方法
- Matlab导出高DPI图像——生成高分辨率.eps .tiff .jpg图像的方法
- Linux修改MySQL数据库密码
- python主函数怎么写_类中的Python主函数
- Vue 使用vue-json-excel 实现导出Excel
- 龚鹏:我是怎么从程序员成为全栈GEEK的
- 优麒麟系统安装MySQL_安装优麒麟(ubuntukylin)操作系统详解
- matlab去除红眼代码及详细介绍
- C语言程序的特点及设计思想
- 初识DataBinding路上的坎
- 今日金融词汇---配股,是什么?
- 阿里巴巴集团主席马云演讲实录(图)
- RSA初探,聊聊怎么破解HTTPS
- Adobe系列安装问题汇总,遇到这些问题该怎么办
- 推荐一个智能的 Java 爬虫框架