dp算法 力扣309最佳买卖股票时机含冷冻期
发布人:shili8
发布时间:2024-12-27 16:58
阅读次数:0
**DP算法:力扣309最佳买卖股票时机含冷冻期**
在力扣的309题中,我们需要找到一组交易日志,来实现最佳买卖股票时机的计算。这个问题可以使用动态规划(DP)算法来解决。
###问题描述给定一个数组 `prices`,其中每个元素代表一天的股价。我们需要在这段时间内进行买卖,以获得最大利润。注意,我们可以多次交易,但不能同时持有两支股票。
### DP算法思路我们使用两个变量来表示当前状态:
* `buy`: 表示最后一次买入时的最小价格。
* `sell`: 表示最后一次卖出时的最大利润。
初始值为:
* `buy` = `-prices[0]`
* `sell` = `0`
然后,我们遍历每一天的股价,更新 `buy` 和 `sell` 的值:
def maxProfit(prices): if not prices: return0 buy, sell = -prices[0],0 for price in prices[1:]: # 每次买入时,更新buy的最小价格 buy = min(buy, -price) # 每次卖出时,更新sell的最大利润 sell = max(sell, price + buy) return sell
###代码注释* `if not prices:`:检查输入数组是否为空。如果是,则返回0,因为没有交易日志。
* `buy` 和 `sell` 的初始值分别为 `-prices[0]` 和 `0`。这意味着我们在第一天买入时的最小价格是负数(因为我们需要花费钱购买股票),而卖出时的最大利润是0。
* 遍历每一天的股价,更新 `buy` 和 `sell` 的值:
* 每次买入时,更新 `buy` 的最小价格。我们使用 `min(buy, -price)` 来实现这一点。如果当前价格小于 `buy` 的值,则更新 `buy` 为当前价格的负数。
* 每次卖出时,更新 `sell` 的最大利润。我们使用 `max(sell, price + buy)` 来实现这一点。如果当前价格加上 `buy` 的值大于 `sell` 的值,则更新 `sell` 为当前价格加上 `buy` 的值。
* 最后,我们返回 `sell` 的值,这代表了最佳买卖股票时机的最大利润。
###代码示例
# 测试用例1:股价为[7,1,5,3,6,8] print(maxProfit([7,1,5,3,6,8])) # 输出:10# 测试用例2:股价为[1,2,3,4,5] print(maxProfit([1,2,3,4,5])) # 输出:4# 测试用例3:股价为[] print(maxProfit([])) # 输出:0
### 总结在力扣的309题中,我们使用DP算法来找到最佳买卖股票时机的最大利润。我们使用两个变量 `buy` 和 `sell` 来表示当前状态,并遍历每一天的股价,更新 `buy` 和 `sell` 的值。最终,我们返回 `sell` 的值,这代表了最佳买卖股票时机的最大利润。