121. 买卖股票的最佳时机
解题思路:动规(按持有和不持有股票分类状态,根据状态推到出递推公式)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# dp[i][0]:第i天不持有股票的最大金额
# dp[i][1]:第i天持有股票的最大金额
#初始化
dp = [[0]*2 for _ in range(len(prices))]
dp[0][0] = 0
dp[0][1] = -prices[0]
#遍历顺序(从左到右)
for i in range(1,len(prices)):
#递推公式
dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i])
dp[i][1] = max(dp[i-1][1],-prices[i])
return dp[-1][0]
122.买卖股票的最佳时机II
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# method 2(动规)
# 0:持有股票
# 1:不持有股票
n = len(prices)
# 初始化
dp = [[0] * 2 for _ in range(n)]
dp[0][0] = -prices[0]
dp[0][1] = 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])
return dp[-1][1]