题目描述
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.
解题思路
乘法的性质不像加法那样,累加结果只要是正的一定是递增,乘法中有可能现在看起来小的一个负数,后面跟另一个负数相乘就会得到最大的乘积。所以我们应该记录当前最大和最小值,当下次乘以一个负数,当前的最小有可能就变为最大。
代码
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.size()==0)
return 0;
int maxP=nums[0];
int minP=nums[0];
int global=nums[0];
for(int i=1;i<nums.size();i++){
int tmpMax=maxP*nums[i];
int tmpMin=minP*nums[i];
maxP=max(nums[i],max(tmpMax,tmpMin));
minP=min(nums[i],min(tmpMax,tmpMin));
global=max(maxP,global);
}
return global;
}
};