solution.cpp 760 字节
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#include <vector>
using std::vector;
#include <algorithm>
using std::max;
using std::min;

class Solution
{
public:
    int maxProfit(vector<int> &prices)
    {
        if (prices.empty())
            return 0;
        int low = prices.front(), high = prices.back(), ret = 0;
        vector<int> history;
        history.reserve(prices.size());
        for (auto today : prices)
        {
            low = min(low, today);
            ret = max(ret, today - low);
            history.push_back(ret);
        }
        for (auto today = prices.crbegin(), past = history.crbegin(); today != prices.crend(); ++today, ++past)
        {
            high = max(high, *today);
            ret = max(ret, *past + high - *today);
        }
        return ret;
    }
};