2020年7月10日打卡
2020-07-10 22:30
155 查看
昨天因为胃疼翘了一天
Leetcode 309. 最佳买卖股票时机含冷冻期
题目
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
之前做过该题的 I 和 II ,基本上知道该用动态规划。因为存在冷冻期,就将动态规划的区间分为3个:手上有股票的最大收益、手上没有股票但在冷冻期的最大收益、没有股票且不在冷冻期的收益。代码如下:
int maxProfit(vector<int>& prices) { if (prices.empty()) { return 0; } int n = prices.size(); vector<vector<int>> f(n, vector<int>(3)); f[0][0] = -prices[0]; for (int i = 1; i < n; ++i) { f[i][0] = max(f[i - 1][0], f[i - 1][2] - prices[i]); f[i][1] = f[i - 1][0] + prices[i]; f[i][2] = max(f[i - 1][1], f[i - 1][2]); } return max(f[n - 1][1], f[n - 1][2]); }
最近预计把买卖股票的问题都做一遍
相关文章推荐
- 太原理工大学机器人团队20天学习打卡day3(模拟电路初步)
- 打卡第四天(Task04)----三数之和
- Java学习打卡Day16
- 前端进阶第3周打卡题目汇总
- 打卡第十八天:正则表达式匹配
- 打卡第二天:删除排序数组中的重复项
- 粤嵌打卡第26天(MYSQL数据库----DML语句操作)
- 粤嵌学习打卡第8天(java面试题之---如何停止一个正在运行的线程?)
- 「Java学习打卡」29、3.24面向对象程序练习
- 「Java学习打卡」 13、删除一个字符串中的指定字母
- 小白的模拟电路初步学习20日打卡(9)
- java基础都学了点啥? (Day4)打卡:让学生拿着手机上网课,不就是让孙悟空看守蟠桃园吗?
- 剑指offer打卡7-调整数组顺序使奇数位于偶数前面(java版)
- 使用Mongodb实现打卡签到系统的实例代码
- opencv打卡26: 双线性插值
- pandas第五次打卡
- 西瓜玲子5.30打卡日记
- pandas组队学习打卡日记4.26
- 第二次打卡笔记
- Pandas学习打卡day#1