class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 两次交易所能获得的最大收益
     * @param prices int整型vector 股票每一天的价格
     * @return int整型
     */
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        vector<int> f(n + 2);
        for (int i = 1, minProfit = INT_MAX; i < prices.size(); i++) {
            f[i] = max(f[i - 1], prices[i - 1] - minProfit);
            minProfit = min(minProfit, prices[i - 1]);
        }
        int ans = 0;
        for (int i = n, maxProfit = 0; i > 0; i--) {
            ans = max(ans, maxProfit - prices[i - 1] + f[i - 1]);
            maxProfit = max(maxProfit, prices[i - 1]);
        }
        return ans;
    }
};