数组中有负有正有0 状态表示 f[i] : 表示从[0, i]数组乘积的最大值 g[i] : 表示从[0, i]数组乘积的最小值
状态计算 通过i-1的状态递推i 对于f[i]
对于g[i]
class Solution {
public:
int maxProduct(vector<int>& nums) {
int f = nums[0];
int g = nums[0];
int ans = nums[0];
int n = nums.size();
for (int i = 1; i < n; i++) {
int a = nums[i];
int nf = f * a;
int ng = g * a;
f = max(a, max(nf, ng));
g = min(a, min(nf, ng));
ans = max(ans, f);
}
return ans;
}
};