股票问题
本题目是只能交易一次
分析第i天的情况
1、第i天持有股票:
1.1 第i-1天就持有股票, dp[i][0]=dp[i-1][0]
1.2 第i天买入股票,dp[i][0] = -prices[i] (只交易一次,第i天买入,则之前没有交易)
2、第i天不持股票
2.1 第i-1天不持股票,dp[i][1]=dp[i-1][1]
2.2 第i天卖出股票,dp[i][1] = prices + dp[i-1][1]
class Solution:
# dp[i][0]第i天持有股票的最大利润,dp[0][1]第i天不持有股票的最大利润
# 递推公式
# dp[i][0]=max(第i-1天持有股票,第i天买入股票)=max(dp[i-1][0], -prices[i])
# dp[i][1]=max(第i-1天不持股票,第i天卖出股票)=max(dp[i-1][1], prices[i]+dp[i-1][0])
def maxProfit(self, prices: List[int]) -> int:
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], -prices[i])
dp[i][1] = max(dp[i-1][1], prices[i] + dp[i-1][0])
return dp[-1][1]
本题目是可以交易多次
分析第i天的情况
1、第i天持有股票:
1.1 第i-1天就持有股票, dp[i][0]=dp[i-1][0]
1.2 第i天买入股票,dp[i][0] =dp[i-1][1] -prices[i] (交易多次,算上前一天不持股票获利)
2、第i天不持股票
2.1 第i-1天不持股票,dp[i][1]=dp[i-1][1]
2.2 第i天卖出股票,dp[i][1] = prices + dp[i-1][1]
class Solution:
# dp[i][0]第i天持有股票的最大利润,dp[0][1]第i天不持有股票的最大利润
# 递推公式
# dp[i][0]=max(第i-1天持有股票,第i天买入股票)=max(dp[i-1][0], dp[i-1][1]-prices[i])
# dp[i][1]=max(第i-1天不持股票,第i天卖出股票)=max(dp[i-1][1], prices[i]+dp[i-1][0])
def maxProfit(self, prices: List[int]) -> int:
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], prices[i]+dp[i-1][0])
return dp[-1][1]