class Solution:
def maxProfit(self, prices: List[int]) -> int:
result = 0
dp = [[0,0] for _ in range(len(prices))]
dp[0][0]=0
dp[0][1]=-prices[0]
#dp[0][0]表示当天交易完成没有股票
# case1:前天也没有股票
# case2:前天有股票,然后今天卖掉
#dp[0][1]表示当天交易完成有股票
# case1:前天本来就有股票
# case2:前天没有股票,今天买了股票
#最终要的是第n天手里没有股票的最大利润,因此是dp[-1][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],dp[i-1][0]-prices[i])
print(dp)
return dp[-1][0]
- 很显然是动态规划的题目,定义两种状态
-
dp[0][0]表示当天交易完成没有股票
-
case1:前天也没有股票
-
case2:前天有股票,然后今天卖掉
-
-
dp[0][1]表示当天交易完成有股票
-
case1:前天本来就有股票
-
case2:前天没有股票,今天买了股票
-
-
最终要的是第n天手里没有股票的最大利润,因此是dp[-1][0]
-
总结:买卖股票的问题是一个典型的动态规划的问题,只要定义好买卖时候的状态,然后分情况讨论取最大值即可。还需要注意的一点是不能股票在手的时候求最大利润,一定是把所有的股票扔掉后手里没有股票的时候求最大利润。