class Solution {
public:
int max(int a, int b, int c) {
int tmp;
if (a > b) tmp = a;
else tmp = b;
if (tmp > c) return tmp;
else return c;
}
int min(int a, int b, int c) {
int tmp;
if (a > b) tmp = b;
else tmp = a;
if (tmp > c) return c;
else return tmp;
}
int maxProduct(vector<int>& nums) {
if (nums.empty()) return 0;
int pre_min, pre_max,res;
pre_min = pre_max = res = nums[0];
for (int i = 1; i < nums.size(); ++i) {
int cur_max = max(nums[i] * pre_max, nums[i] * pre_min, nums[i]);
int cur_min = min(nums[i] * pre_max, nums[i] * pre_min, nums[i]);
if (cur_max > res) res = cur_max;
pre_max = cur_max;
pre_min = cur_min;
}
return res;
}
};