classSolution { public: intmaxProduct(vector<int>& nums){ int ret = INT_MIN; int begin = 0; int n = nums.size(); for(int i = 0; i < n; ++i) { if(nums[i] == 0) { ret = max(ret, helper(nums, begin, i)); begin = i + 1; } } ret = max(ret, helper(nums, begin, n)); if(begin != 0 && ret < 0) ret = 0; return ret; } private: inthelper(vector<int>& nums, int start, int end) { int ret = INT_MIN; int cur = 1; for(int i = start; i < end; ++i) { cur *= nums[i]; ret = max(ret, cur); }
cur = 1; for(int i = end - 1; i >= start; --i) { cur *= nums[i]; ret = max(ret, cur); } return ret; } };