1 leetcode每日一题
依旧是股票,依旧是不会emm。看了题解做的。
不过,慢慢来,加油。
思路还是动态规划,难点是怎么表示状态,以及状态的转移。
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
if not prices:
return 0
n = len(prices)
# f[i][0] 第i天结束后,手里持有一支股票
# f[i][1] 第i天结束后,手里不持有股票,且处于冷冻期(那肯定是第i天卖了一支股票)
# f[i][2] 第i天结束后,手里不持有股票,且不处于冷冻期(这种情况,第i天肯定没卖股票,也没买股票)
f = [[-prices[0],0,0]] + [[0]*3 for _ in range(n-1)] #初始化状态变量
for i in range(1,n):
f[i][0] = max(f[i-1][2] - prices[i], f[i-1][0])
# ①今天买入:前一天不持有、不处于冷冻期;②之前买入:前一天持有。
f[i][1] = f[i-1][0] + prices[i]
# 前一天持有,今天卖了
f[i][2] = max(f[i-1][1], f[i-1][2])
# ①前一天不持有,且处于冷冻期;②前一天不持有,且不处于冷冻期
return max(f[n-1][1], f[n-1][2])