股票交易的最大收益(二)
股票交易的最大收益(二)
http://www.nowcoder.com/questionTerminal/4892d3ff304a4880b7a89ba01f48daf9
思想:用一个flag把区间分为两部分,找到两部分各自的谷(买入)和峰(卖出)。从0到n移动flag遍历数组。
注意:这里代码并没有flag,只不过分两次把flag的两部分遍历找了出来。
参考答案:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 两次交易所能获得的最大收益 * @param prices int整型vector 股票每一天的价格 * @return int整型 */ int maxProfit(vector<int> prices) { int n = prices.size(); int money = prices[0]; vector<int> first(n, 0); for (int i = 1; i < n; ++i) { money = min(money, prices[i]); first[i] = max(first[i - 1], prices[i] - money); } vector<int> second(n, 0); money = prices[n - 1]; for (int i = n - 2; i >= 0; --i) { money = max(money, prices[i]); second[i] = max(second[i + 1], money - prices[i]); } int ans = 0; for (int i = 0; i < n; ++i) ans = max(ans, first[i] + second[i]); return ans; } };