# LeetCode : 0152. Maximum Product Subarray (array)
###### tags:`leetcode`
```
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <unordered_map>
using std::vector;
using std::unordered_map;
using namespace std;
class BaseVectorPrint {
public:
void BasePrint00(vector<int>& num) {
for (size_t i = 0; i < num.size(); ++i) {
cout << "[" <<num.at(i) << "]" << "; ";
}
cout << endl;
}
void BasePrint01(vector<int>& num) {
for (size_t i = 0; i < num.size(); ++i) {
cout << num[i] << "; ";
}
cout << endl;
}
void BasePrint02(vector<int>& num) {
for (const auto &item : num) {
cout << item << "; ";
}
cout << endl;
}
void TwoDimensionalPrint(vector<vector<int>> &num){
for (int i = 0; i < num.size(); i++)
{
for (int j = 0; j < num[i].size(); j++)
{
cout << "[" << num[i][j] << "]";
}
cout << endl;
}
}
};
class BaseSolution {
public:
int maxProduct(vector<int>& nums) {
int MaxProduct = INT_MIN;
for(int i = 0; i<nums.size(); i++){
int ProductTemp = 1;
for (int j = 0; j < i ; j++){
ProductTemp *= nums[j];
MaxProduct = max(MaxProduct,ProductTemp);
}
}
return MaxProduct;
}
//time complexity O(N^2) two for loop
//space complexity O(1)
};
class Solution01 {
public:
int maxProduct(vector<int>& nums) {
// Product quotient , defalut set first nums better 1;
// plus , sub , defalut set first nums better 0;
int Max = 1 ;
int Min = 1 ;
int MaxProd = INT_MIN;
for (int i = 0 ; i < nums.size(); i++){
int MaxTemp = Max * nums[i];
int MinTemp = Min * nums[i];
Max = max(nums[i],max(MaxTemp,MinTemp));
// if 0 Product any nums = 0 , so nums[i] next new head
// check Max Confirm the number, negative * negative = positive nums
Min = min(nums[i],min(MaxTemp,MinTemp));
// if 0 Product any nums = 0 , so nums[i] next new head
// check Min Confirm the number, positive * positive = negative nums
MaxProd = max(Max,MaxProd);
}
return MaxProd;
}
//time complexity O(N) one for loop
//space complexity O(1)
};
int main(void)
{
BaseVectorPrint printVector;
Solution01 runfunc;
vector<int> test01 = { 2, 3, -2, 4 };
vector<int> test02 = { -2, 0, -1 };
vector<int> test03 = { -1, 1, 0, -3, 3 };
vector<int> ans ;
int intAns;
intAns = runfunc.maxProduct(test01);
//printVector.BasePrint00(ans);
printf("%d\n",intAns);
printf("test\n");
system("pause");
}
```
> Tip check if 0
> Tip check Max Confirm the number, negative * negative = positive
> Tip check Min Confirm the number, positive * positive = negative