【LeetCode】动态规划 刷题训练(六)

文章目录

123. 买卖股票的最佳时机 III

点击查看:买卖股票的最佳时机 III

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:
输入:prices = [3,3,5,0,0,3,1,4]
输出:6
解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。
随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3 。
示例 2:
输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

题目解析

相对于之前的股票问题,去除了手续费和冷冻期,其他大部分相同,
但是交易的次数从一次可以变为两次(最多为两次,也可以选择一次或者零次)

从买入股票到 卖出股票 ,才算完成一笔交易

零笔交易

由于价格是降序的,所以无论什么时候买股票,再卖出股票都是会亏本的
所以在这个期间内,什么都不做,此时的利润为:0
此时完成零笔交易

一笔交易

当价格为升序的时候,在第一天卖出股票,在价格为5之前什么都不做,
在价格为5时,卖出股票,此时 利润为:5-1=4
此时完成 一笔交易

两笔交易

在第一天买入股票,由于第二天要是买的话根本没有利润,所以第二天什么都不做
在第三天的时候,将股票卖出 ,此时的利润为: 5-3=2

在第四天买入股票,一直到 价格为4块之前都处于什么都不干的状态
在价格为4块时,卖出股票
此时的利润为:4-0=4
完成两笔交易的总利润为:4+2=6

此时完成两笔交易

状态转移方程

dp[i]:表示第i天结束后,所能获得的最大利润

在i位置处,共有两种状态,买入状态和卖出状态
用f表示买入状态,用g表示卖出状态
通过i表示第i天结束
通过j表示交易次数

f[i][j]:表示从第i天结束后,完成了j笔交易,处于买入状态,此时的最大利润
g[i][j]:表示从第i天结束后,完成了j笔交易,处于卖出状态,此时的最大利润

在完成 买入股票,卖出股票的操作后,会改变交易次数

f[i][j]状态转移方程

若第i-1天为买入状态,则第i天啥也不干,第i天也为买入状态
该情况下:f[i][j]=f[i-1][j];

若第i-1天为卖出状态,则第i天为买入状态
需要减去买股票对应的花费 price[i]
该情况下: f[i][j]=g[i-1][j]-price[i];

状态转移方程为:
f[i][j]=max(f[i-1][j],g[i-1][j]-price[i]);

g[i][j]状态转移方程

若第i-1天为卖出状态,则第i天什么都不干,则第i天也为卖出状态
该情况下:g[i][j]=g[i-1][j];

版权声明:本文为博主作者:风起、风落原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_62939852/article/details/131462419

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2024年4月1日
下一篇 2024年4月1日

相关推荐