class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @return int整型
     */
    int maxProduct(vector<int>& nums) {
        // write code here
        if (nums.empty()) return 0;
        long long maxHere = nums[0], minHere = nums[0], ans = nums[0];
        for (int i = 1; i < nums.size(); ++i) {
            long long x = nums[i];
            if (x < 0) swap(maxHere, minHere);     // 负数翻转大小
            maxHere = max(x, maxHere * x);         // 以 x 结尾的最大乘积
            minHere = min(x, minHere * x);         // 以 x 结尾的最小乘积
            ans = max(ans, maxHere);
        }
        return ans; 
    }
};