一、问题描述
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4]
,
the contiguous subarray [2,3]
has the largest product = 6
.
二、思路
在循环遍历时,我们需要每次都更新max_pro和min_pro,每次更新都需要将当前的值乘以上次的最大最小值作比较,同时和当前的nums[i]作比较,最后当前的最大值如果大于以前的最大值,需要更新。一种乘积特殊情况是:上一个数和当前数都是负数,但是他们的乘积为正数!!!
三、代码
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.size() == 0) return 0;
int max_pro = nums[0], min_pro = nums[0], result = nums[0];
for(int i = 1; i < nums.size(); ++i){
int temp = max_pro;
max_pro = max(max(max_pro * nums[i],min_pro * nums[i]),nums[i]);
min_pro = min(min(temp * nums[i],min_pro * nums[i]),nums[i]);
if(max_pro > result)
result = max_pro;
}
return result;
}
};