# 152. Maximum Product Subarray [leetcode網址](https://leetcode.com/problems/maximum-product-subarray/description/) ## 問題 找到一個subarry,且其所有數值的乘積是最大 ``` Example 1: Input: nums = [2,3,-2,4] Output: 6 [2,3] has the largest product 6. Example 2: Input: nums = [-2,0,-1] Output: 0 The result cannot be 2, because [-2,-1] is not a subarray. ``` ## Idea 用 Kadane's ALgorithm,用兩個loop,一個forward:前面到後面,一個backward:後面到前面,因為有負數所以可能有不同結果(ex. [-1, -1, -2]),最後的結果是這兩個loop的綜合評估 1. keep住一個 `pro` 來看累乘到目前的乘積 2. 如果 `pro`==0,就把他reset成1 3. 過程中不斷更新最大乘積 ## Solution 時間複雜度=O(N); 空間複雜度=O(1) ```cpp int maxProduct(vector<int>& nums) { int n=nums.size(), pro = 1, maxi=INT_MIN; for(int i=0; i<n; i++){ pro*=nums[i]; maxi = max(maxi, pro); if(pro==0)pro=1; } pro=1; for(int i=n-1; i>=0; i--){ pro*=nums[i]; maxi = max(maxi, pro); if(pro==0)pro=1; } return maxi; } ```