## [152\. Maximum Product Subarray](https://leetcode.com/problems/maximum-product-subarray/)
Given an integer array `nums`, find a subarray that has the largest product, and return _the product_.
The test cases are generated so that the answer will fit in a **32-bit** integer.
**Example 1:**
**Input:** nums = \[2,3,-2,4\]
**Output:** 6
**Explanation:** \[2,3\] has the largest product 6.
**Example 2:**
**Input:** nums = \[-2,0,-1\]
**Output:** 0
**Explanation:** The result cannot be 2, because \[-2,-1\] is not a subarray.
**Constraints:**
- `1 <= nums.length <= 2 * 104`
- `-10 <= nums[i] <= 10`
- The product of any prefix or suffix of `nums` is **guaranteed** to fit in a **32-bit** integer.
```cpp=
class Solution {
public:
int maxProduct(vector<int>& nums) {
int n = nums.size();
if (n == 0) return 0;
// 用一個變數 curMax 存目前為止最大的乘積
int curMax = nums[0];
// 用一個變數 curMin 存目前為止最大的乘積
int curMin = nums[0];
int res = curMax;
for (int i = 1; i < n; i++) {
int cur = nums[i];
// 有三種組合,求最大值
int temp_max = max({cur, curMax * cur, curMin * cur});
// 有三種組合,求最小值
curMin = min({cur, curMax * cur, curMin * cur});
// temp_max 的作用是讓 curMax 暫存先前的值
curMax = temp_max;
res = max(curMax, res);
}
return res;
}
};
```
:::success
- 時間複雜度:$O(N)$
- 空間複雜度:$O(1)$
:::