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:
/**
* 为直观起见,函数用了空间复杂度为O(n)的vector
* */
int maxProduct(vector<int>& nums) {
//这两个vector可用O(1)空间复杂度的常量值代替
vector<int> maxToHere;
vector<int> minToHere;
maxToHere.push_back(nums[0]);
minToHere.push_back(nums[0]);
//找出每个以nums[i]结尾的最大积与最小积
for(int i=1; i<nums.size(); ++i) {
int cur = nums[i];
maxToHere.push_back(max(cur, max(cur*maxToHere[i-1], cur*minToHere[i-1])));
minToHere.push_back(min(cur, min(cur*maxToHere[i-1], cur*minToHere[i-1])));
}
//找出最大的数
int max = maxToHere[0];
for(int i=1; i<maxToHere.size(); ++i) {
if(maxToHere[i] > max) max = maxToHere[i];
}
return max;
}
};