买卖股票1
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
# dp[i][0]代表第i天持有股票的现金状态
# dp[i][1]代表第i天不持有股票的现金状态
dp=[[0]*2 for _ in range(len(prices))]
dp[0][0]=-prices[0]
dp[0][1]=0
for i in range(1,len(prices)):
# 第i天持有股票,就有可能是第i-1天就持有,或者是把股票买进来了
dp[i][0]=max(dp[i-1][0],-prices[i])
# 第i天不持有股票,就有可能是第i-1天就不持有,或者是第i-1天持有,然后把股票卖出去了
dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i])
return dp[len(prices)-1][1]
买卖股票2
可以多次购买,并且下次购买前,手上没有其余股票
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
# 可以交易多次后,主要差别就在第i天持有股票的情况,
# 第i天如果持有股票,两种情况,一种就是前一天就持有,还有一种情况是第i天买入了
# 但是买入要保证前一天是不持有股票的状态,所以是dp[i-1][1]-price[i]
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]