题解 | #买卖股票的最好时机(二)# Py3 + 简单解释
买卖股票的最好时机(二)
https://www.nowcoder.com/practice/fbc5dad3e215457fb82a3ae688eb7281
import sys
# 对于每天来说,每天可能有三种可操作状态,可买入,可卖出,和不操作三种选择
# 假设当天可买入状态下,从第一台呢到第i天能收获的最高利润是 buy[i]
# 当天可卖出状态下能收获的最高利润是 sell[i]
# 不操作的话收益和 0~i之间某一天的买入或者卖出一样,无需专门记录
# 因此
# buy[i] = max(sell[i-1] - prices[i], buy[i-1])
# sell[i] = max(buy[i-1] + prices[i], sell[i-1]
# 最后能max(buy[i],sell[i]) 即可
n = int(input())
if n <= 1:
print(0)
else:
prices = list(map(int,input().strip().split(' ')))
sell = [0] * (n+1)
buy = [0] * (n+1)
buy[0] = - prices[0] #第一天不可卖出,因此让第一天的卖出值为0
for i in range(1,n+1):
buy[i] = max(sell[i-1] - prices[i-1], buy[i-1])
sell[i] = max(buy[i-1] + prices[i-1], sell[i-1])
max_profit = max(buy[-1],sell[-1])
if max_profit <= 0:
print(0)
else:
print(max_profit)
