121. 买卖股票的最佳时机
class Solution:
def maxProfit(self, prices: List[int]) -> int:
length = len(prices)
if len == 0:
return 0
dp = [[0] * 2 for _ in range(length)]
#dp[i][0]表示持有股票的最大金额,dp[i][1]表示不持有股票的最大金额
dp[0][0] = -prices[0]
dp[0][1] = 0
#那么dp[0][0]表示第0天持有股票,此时的持有股票就一定是买入股票了,因为不可能有前一天推出来,所以dp[0][0] -= prices[0];dp[0][1]表示第0天不持有股票,不持有股票那么现金就是0,所以dp[0][1] = 0;
for i in range(1, length):
dp[i][0] = max(dp[i-1][0], -prices[i])
dp[i][1] = max(dp[i-1][1], prices[i] + dp[i-1][0])
return dp[-1][1]
LC122.买卖股票的最佳时机II
class Solution:
def maxProfit(self, prices: List[int]) -> int:
length = len(prices)
dp = [[0] * 2 for _ in range(length)]
dp[0][0] = -prices[0]
dp[0][1] = 0
for i in range(1, length):
dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i]) #注意这里是和121. 买卖股票的最佳时机唯一不同的地方
dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])
return dp[-1][1]
本文详细解析了两种股票交易策略的算法实现:一种是只允许进行一次买卖操作的情况下的最佳时机选择;另一种是在允许进行多次买卖操作的情况下如何最大化利润。通过动态规划的方法,文章给出了清晰的算法步骤和代码实现。
625

被折叠的 条评论
为什么被折叠?



