问题描述
小R近期表现出色,公司决定以股票的形式给予奖励,并允许他在市场上进行交易以最大化收益。给定一个数组,数组中的第 i
个元素代表第 i
天的股票价格。小R需要设计一个算法来实现最大利润。
股票交易规则如下:
- 小R可以多次买卖股票,但在买入新的股票前必须卖出之前的股票。
- 每次卖出股票后存在一天的冷冻期,在冷冻期内小R不能购买股票。
你的任务是帮助小R计算出在遵守交易规则的情况下能够获得的最大利润。
stocks
: 一个整数列表,表示连续几天内的股票价格。
代码
def solution(stocks:list)->int:
n = len(stocks)
f = [[0] * 2 for _ in range(n + 2)]
f[1][1] = -10 ** 9
for i, p in enumerate(stocks):
f[i + 2][0] = max(f[i + 1][0], f[i + 1][1] + p)
f[i + 2][1] = max(f[i + 1][1], f[i][0] - p)
return f[-1][0]
if __name__ == "__main__":
# You can add more test cases here
print(solution([1, 2]) == 1 )
print(solution([2, 1]) == 0 )
print(solution([1, 2, 3, 0, 2]) == 3 )
print(solution([2, 3, 4, 5, 6, 7]) == 5 )
print(solution([1, 6, 2, 7, 13, 2, 8]) == 12 )