股票市场交易策略优化 问题描述:小R近期表现出色,公司决定以股票的形式给予奖励,并允许他在市场上进行交易以最大化收益。给定一个数组,数组中的第 i 个元素代表第 i 天的股票价格。小R需要设计一个算法来实现最大利润。
股票交易规则如下:
- 小R可以多次买卖股票,但在买入新的股票前必须卖出之前的股票。
- 每次卖出股票后存在一天的冷冻期,在冷冻期内小R不能购买股票。
你的任务是帮助小R计算出在遵守交易规则的情况下能够获得的最大利润。
思路解析:动态规划问题。记第 i 天持有股票的最大收益为 dp[i][1], 第 i 天未持有股票的最大收益为 dp[i][0]。
相应的动态转移方程为
dp[i][0] = max(dp[i-1][1], dp[i-1][1] + sockets[i]); 什么都不干,或者从一天期持股票状态,卖出股票 dp[i][1] = max(dp[i-1][1], dp[i-2][0] - sockets[i]); 什么都不干,或者从两天前无股票状态,买入股票(因为有一天的冷冻期)
边界条件
dp[0][1] = -sockets[0], dp[1][1] = max(-sockets[0],-sockets[1]) dp[0][0] = 0, dp[1][0] = max(0, sockets[1]-sockets[0])
进一步进行空间优化,用 pre0 记录 dp[i-1][0],用 f0 记录 dp[i][0],用 f1 记录 dp[i][1]
复杂度分析:记 sockets 数组的长度为 n 时间复杂度 O(n),空间复杂度 O(1)