【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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Leetcode刷题篇】Leetcode714 买卖股票的最佳时机含手续费
下一篇:【Leetcode刷题篇】leetcode122. 买卖股票的最佳时机 II

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月30日 21时51分34秒