[Leetcode] 第309题 最佳买卖股票时机含冷冻期
一、题目描述
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
- 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
- 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
示例:
输入: [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
二、题目分析
1)动态规划题目,和最佳买卖股票时机III和IV类似,需要保存两种状态
2)buy[i]代表第i天不卖股票的最大利润,sell[i]代表第i天不买股票的最大利润
3)那么buy[i]=max(buy[i-1],sell[i-2]-prices[i]);第一项代表不买股票,也就是什么也不做,和前一天不卖的状态一致,第二项代表买股票,因为有冷冻期,那么应该是前两天卖出得到的钱减去当天的股票价格
4)同理,sell[i]=max(sell[i-1],buy[i-1]+prices[i]);
5)其实就是分别找到距离buy[i]和sell[i]最近的两个状态,就是buy[i-1],sell[i-2]和sell[i-1],buy[i-1]
6)不过需要注意初始状态,第一天卖出初始化为0,买入需要初始化为-prices[0],
7)并且需要注意buy在第二天的状态,此时sell[i-2]应该用0代替
8)最终状态,肯定是最后一次卖出的时候利润最大
三、代码实现
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if (!n)return ;
vector<int>buy(n), sell(n);
buy[] = -prices[];
sell[] = ;
for (int i = ; i < n; ++i) {
sell[i] = max(sell[i - ], buy[i - ] + prices[i]);
if (i < )
buy[i] = max(buy[i - ], -prices[i]);
else buy[i] = max(buy[i - ], sell[i - ] - prices[i]);
}
return sell[n - ];
}
};
[Leetcode] 第309题 最佳买卖股票时机含冷冻期的更多相关文章
- 【LeetCode】309、最佳买卖股票时机含冷冻期
Best Time to Buy and Sell Stock with Cooldown 题目等级:Medium 题目描述: Say you have an array for which the ...
- Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown)
Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown) 股票问题: 121. 买卖股票 ...
- Java实现 LeetCode 309 最佳买卖股票时机含冷冻期
309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股 ...
- Leetcode 309.最佳买卖股票时机含冷冻期
最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格. 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不 ...
- 手撕代码:leetcode 309最佳买卖股票时机含冷冻期
转载于:https://segmentfault.com/a/1190000014746613 给定一个整数数组,其中第i个元素代表了第i天的股票价格. 设计一个算法计算出最大利润.在满足以下约束条件 ...
- leetcode 最佳买卖股票时机含冷冻期
这道题算是股票问题的变体之一,主要在于不限制交易次数而存在冷冻期,所以我们需要对我们的dp数组进行改变,第一维是指第几天,第二维是指是否持有股票,在这里因为不限制交易次数k,所以并未涉及第三维度. 同 ...
- [Swift]LeetCode309. 最佳买卖股票时机含冷冻期 | Best Time to Buy and Sell Stock with Cooldown
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- leecode 309. 最佳买卖股票时机含冷冻期
/***** //sell[i]表示截至第i天,最后一个操作是卖时的最大收益: //buy[i]表示截至第i天,最后一个操作是买时的最大收益: //cool[i]表示截至第i天,最后一个操作是冷冻期时 ...
- 【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】
[121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Say you have ...
随机推荐
- 结合suctf-upload labs-RougeMysql再学习
这篇主要记录一下这道题目的预期解法 做这道题首先要在自己的vps搭建一个rouge mysql,里面要填写需要读取客户端的文件名,即我们上传的phar文件路径 先搭一个rouge mysql测试看看: ...
- SpringBoot打包部署简单说明
SpringBoot项目打包部署 一.jar包方式 这种使用SpringBoot内嵌的Tomcat进行部署 打包方式默认jar,所以下面加也行,不加也行 <packaging>war< ...
- Spring Boot 默认指标从哪来?
了解有关 Spring Boot 默认指标及其来源的更多信息. 您是否注意到 Spring Boot 和 Micrometer 为您的应用生成的所有默认指标? 如果没有 - 您可以将 actuator ...
- cython 第一次接触
https://www.cnblogs.com/kaituorensheng/p/4452881.html
- DES加解密工具类
这两天在跟友商对接接口,在对外暴露接口的时候,因为友商不需要登录即可访问对于系统来说存在安全隐患,所以需要友商在调用接口的时候需要将数据加密,系统解密验证后才执行业务.所有的加密方式并不是万能的,只是 ...
- 快应用 吸顶 bug
官网说, 加载页面时,所有元素的appear事件都会被触发一次.因此,需要过滤第一次的appear事件: 但是,即使设置了过滤,也无效 于是,我把show属性改成了if属性,问题就解决 如下图:
- 2019icpc南京网络赛_F_Greedy Sequence
题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...
- vue.js纯前端处理如何将后台返回来的csv数据导出成csv文件
需要实现一个下载csv文件的功能,但后台没有对这个下载文件进行处理,而是将csv数据传给前台而已,需要前台做一下处理. 这是按钮的代码: <a> <el-button size=&q ...
- zstu19一月月赛 duxing201606的原味鸡树
duxing201606的原味鸡树 题意: 给定一颗有n(n<=1e9)个节点的完全二叉树,1e5次询问,问某个节点有几个子节点. 思路: 自己在月赛上没有思路,问了zfq才知道. 设两个指标, ...
- Linux开机启动过程(个人理解)
简述Linux启动过程 1)BIOS开机自检 2)MBR引导 3)启动引导程序菜单(GRUB) 4)加载内核 5)加载虚拟文件系统加载函数模块 6)启动系统进程 /sbin/init --->/ ...