# 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