题解 | #买卖股票的最好时机(二)#
买卖股票的最好时机(二)
https://www.nowcoder.com/practice/9e5e3c2603064829b0a0bbfca10594e9
/** state translat equation f(0) = 0 f(x) = f(x-1) if v(x-1) > v(x) f(x) = f(x-2) + v(x) - v(x-2) if v(x-1) < v(x) && left 0 f(x) = f(x-1) + v(x) - v(x-1) if v(x-1) < v(x) && left 1 */ #include <algorithm> #include <cerrno> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 * @param prices int整型vector 股票每一天的价格 * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here vector<int> maxProfit(prices.size(), 0); bool bLeft = true; for(auto i=1; i < prices.size(); i++) { if(prices[i] > prices[i-1]) { if(bLeft) { maxProfit[i] = maxProfit[i-1] + prices[i] - prices[i-1]; } else { maxProfit[i] = maxProfit[i-2] + prices[i] - prices[i-2]; } bLeft = false; } else { maxProfit[i] = maxProfit[i-1]; bLeft = true; } } return *maxProfit.rbegin(); } };
状态转移方程:
/** state translat equation
f(0) = 0
f(x) = f(x-1) if v(x-1) > v(x)
f(x) = f(x-2) + v(x) - v(x-2) if v(x-1) < v(x) && left 0
f(x) = f(x-1) + v(x) - v(x-1) if v(x-1) < v(x) && left 1
*/