本文主要是介绍算法训练营Day51(动态规划12),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
309.最佳买卖股票时机含冷冻期 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
提醒
本题加了一个冷冻期,状态就多了,有点难度,要把各个状态分清,思路才能清晰
注意初始化dp[0][0]、dp[0][1]、dp[0][2],dp[0][3,]如果这状态是非法状态,那就主要看递推公式需要把它初始化为多少
class Solution:def maxProfit(self, prices: List[int]) -> int:n = len(prices)if n < 2:return 0# 定义三种状态的动态规划数组dp = [[0] * 3 for _ in range(n)]dp[0][0] = -prices[0] # 持有股票的最大利润dp[0][1] = 0 # 不持有股票,且处于冷冻期的最大利润dp[0][2] = 0 # 不持有股票,不处于冷冻期的最大利润for i in range(1, n):# 当前持有股票的最大利润等于前一天持有股票的最大利润或者前一天不持有股票且不处于冷冻期的最大利润减去当前股票的价格dp[i][0] = max(dp[i-1][0], dp[i-1][2] - prices[i])# 当前不持有股票且处于冷冻期的最大利润等于前一天持有股票的最大利润加上当前股票的价格dp[i][1] = dp[i-1][0] + prices[i]# 当前不持有股票且不处于冷冻期的最大利润等于前一天不持有股票的最大利润或者前一天处于冷冻期的最大利润dp[i][2] = max(dp[i-1][2], dp[i-1][1])# 返回最后一天不持有股票的最大利润return max(dp[-1][1], dp[-1][2])
714.买卖股票的最佳时机含手续费 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
提醒
相对122.买卖股票的最佳时机II ,本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的,可以尝试自己做一做
class Solution:def maxProfit(self, prices: List[int], fee: int) -> int:n = len(prices)dp = [[0] * 2 for _ in range(n)]dp[0][0] = -prices[0] #持股票for i in range(1, n):dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i])dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i] - fee)return max(dp[-1][0], dp[-1][1])
股票问题总结代码随想录
一刷没时间,二刷再将之前的题目重做再总结
这篇关于算法训练营Day51(动态规划12)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!