注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
其实就是leetcode 309啊。这道题看起来很简单DP可以做,关键是想到准确清晰的转移状态方程。
hold[i] --- 表示在第i天持有股票的最大累计Profit;
unhold[i] -- ... 不持有...;
最后unhold[n - 1]即为结果(因为最后一天必然已经将股票卖出了)
transition equation:
hold[i] = Max{hold[i - 1], unhold[i - 2] - prices[i]};
unhold[i] = Max{unhold[i - 1], hold[i - 1- int N = prices.length;
- if (N == 0)
- return 0;
- int hold, unhold = 0;
- int last2_hold = -prices[0], last2_unhold = 0;
- if (N == 1)
- return last2_unhold;
- int last1_hold = - Math.min(prices[0], prices[1]), last1_unhold = Math.max(prices[1] - prices[0], 0);
- if (N == 2)
- return last1_unhold;
- for (int i = 2; i < N; ++i) {
- hold = Math.max(last1_hold, last2_unhold - prices[i]);
- unhold = Math.max(last1_unhold, last1_hold + prices[i]);
- //update
- last2_hold = last1_hold;
- last2_unhold = last1_unhold;
- last1_hold = hold;
- last1_unhold = unhold;
- }
- return unhold;
复制代码 ] + prices[i]};
代码如下:
|