本文主要是介绍刷题第四十三天 309.买卖股票最佳时机+冷冻 714. 买卖股票最佳时机+手续费,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
class Solution:def maxProfit(self, prices: List[int]) -> int:#dp[i][0] 第i天持有股票 手上的最大现金#dp[i][1] 第i天不持有股票,手上的最大现金#dp[i][0] = max(dp[i - 1][0], dp[i - 2][1] - prices[i]) 因为有一天冻结,并且无限次交易,所以第i天持有的情况之一 就是第i-2天的时候卖掉的时候手上的现金 减掉今天的价格#dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]) 不持有的情况不影响,因为出售没有冷冻限制if len(prices) == 1:return 0if len(prices) == 2:return (prices[1] - prices[0]) if prices[1] - prices[0] > 0 else 0dp = [[0] * 2 for _ in range(len(prices))]dp[0][0] = -prices[0]for i in range(1, len(prices)):if i == 1: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]) dp[i][0] = max(dp[i - 1][0], dp[i - 2][1] - prices[i])dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]) return dp[-1][1]
#dp[i][0] 第i天持有股票 手上的最大现金
#dp[i][1] 第i天不持有股票,手上的最大现金
#dp[i][0] = max(dp[i - 1][0], dp[i - 2][1] - prices[i]) 因为有一天冻结,并且无限次交易,所以第i天持有的情况之一 就是第i-2天的时候卖掉的时候手上的现金 减掉今天的价格
#dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]) 不持有的情况不影响,因为出售没有冷冻限制
class Solution:def maxProfit(self, prices: List[int], fee: int) -> int:#dp[i][0] 第i天持有股票 手上的最大现金#dp[i][1] 第i天不持有股票,手上的最大现金#dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i] - fee) #因为每笔交易,所以统一在买入的时候收,涉及到买卖就再减掉fee#dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])if len(prices) == 1:return 0if len(prices) == 2:return (prices[1] - prices[0] - fee) if prices[1] - prices[0] - fee > 0 else 0dp = [[0] * 2 for _ in range(len(prices))]dp[0][0] = -prices[0] - feefor i in range(1, len(prices)):dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i] - fee)dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]) return dp[-1][1]
#dp[i][0] 第i天持有股票 手上的最大现金
#dp[i][1] 第i天不持有股票,手上的最大现金
#dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i] - fee) #因为每笔交易,所以统一在买入的时候收,涉及到买卖就再减掉fee
#dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])
总结篇代码随想录
这篇关于刷题第四十三天 309.买卖股票最佳时机+冷冻 714. 买卖股票最佳时机+手续费的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!