152. Maximum Product Subarray

class Solution {
public:
    int maxProduct(vector<int>& nums)
    {
        int n = nums.size();

        int curMax = nums[0], curMin = nums[0];
        int res = curMax;

        for (int i = 1; i < n; i++)
        {
            int cur = nums[i];
            int tempMax = max({cur, curMax * cur, curMin * cur});

            curMin = min({cur, curMax * cur, curMin * cur});
            curMax = tempMax;
            res = max(curMax, res);
        }
        return res;
    }
};
  • T: O(N)O(N)
  • S: O(1)O(1)