解题思路
此时负数的出现就导致原本的最小值一下子变成了最大值,原本的最大值一下子变成了最小值,所以我们就需要同时记录这两个数值,因为没准后面是什么情况,没准现在找到的最小值就会成为最终结果的最大值。
代码实现
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.empty()) return 0;
int maxx = nums[0];
vector <int> fmax(nums), fmin(nums);
for(int i = 1; i < nums.size(); ++i)
{
fmax[i] = max(max(fmax[i - 1] * nums[i], fmin[i - 1] * nums[i]), nums[i]);
fmin[i] = min(min(fmax[i - 1] * nums[i], fmin[i - 1] * nums[i]), nums[i]);
maxx = max(fmax[i], maxx);
}
return maxx;
}
};