【Leetcode刷题篇】leetcode309 最佳买卖股票时机含冷冻期
发布日期:2021-06-29 15:35:11
浏览次数:2
分类:技术文章
本文共 874 字,大约阅读时间需要 2 分钟。
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:
输入: [1,2,3,0,2]
输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
解题思路:有三种不同的状态:
- 持有一支股票; 初始化-price[0]
- 不持有股票,并且处于冷冻期 初始化0
- 不持有股票,并且不处于冷冻期 初始化0
对于转移方程来说:
持有一只股票
持有的这一只股票可能是i-1天就已经持有了;也可能是第i天买入的,那么i-1天就不能持有股票且不处于冷冻期,那么
dp0= Math.max(前一天就持有了,前一天没有持有且不处于冷冻期 - 买来的)
不持有一只股票且处于冷冻期
持有股票且处于冷冻期表明今天卖出了,那么前一天必须持有股票 + 卖出的
dp1=(前一天持有的股票dp0 +卖掉了)
不持有一只股票且不处于冷冻期
不持有股票且不处于冷冻期说明当天没操作,看前一天持有股票;
看前一天持有卖出股票
dp2=Math.min(前一天就是未持有冷冻dp1,前一天持有未冷冻期dp12)
最终结果就是看不持有股票中的最大值
class Solution { public int maxProfit(int[] prices) { if (prices.length == 0) { return 0; } // 三个状态 // 持有 int dp0 = -prices[0]; // 未持有冷冻期 int dp1 = 0; // 未持有不冷冻期 int dp2 = 0; for(int i=1;i
转载地址:https://codingchaozhang.blog.csdn.net/article/details/111304584 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月30日 21时51分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python基础:list,map,open()文件读写
2019-04-29
Go面向对象-接口
2019-04-29
Go-多路选择和超时控制
2019-04-29
Go-channel的关闭和广播
2019-04-29
Go-任务的取消
2019-04-29
AIX 作为Web Server 使用时,tcp相关的几个参数调整
2019-04-29
自我学习37:请描述一下网页从开始请求到最后展示的完整过程
2019-04-29
自我学习38:如何区分前后端BUG
2019-04-29
自我学习39:接口自动化测试用例&功能测试用例区别
2019-04-29
mirror去兔子补丁下载 附安装教程
2019-04-29
mirror去兔子补丁 v3.0附安装教程
2019-04-29
mirror去兔子补丁为什么还有兔子_mirror去兔子补丁使用教程
2019-04-29
3dmax2012安装教程
2019-04-29
OC渲染器(Octane Render)整合版安装包 附安装教程
2019-04-29
操作系统期末大题复习
2019-04-29
hive:分区表,hbase外表
2019-04-29
想要成为运维,想要成为后期的架构师?这些知识是必备的!
2019-04-29
linux 是如何 快速一键安装禅道的呐?
2019-04-29
运维面试基础试题(四)
2019-04-29
一键安装Openstack单节点 必能成功
2019-04-29