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(n) = max{ max(n-1), product(...n) }, product是连续乘积到n的最大正值(包含a[n]的连续最大乘积)。所以需记录连续乘积到n-1的最大的正负值。
class Solution {
public:
int maxProduct(vector<int>& nums) {
if (nums.size() < 1)
return 0;
int maxNum = (numeric_limits<int>::min)();
int positive = 1;
int negative = 1;
for (int i = 0; i < nums.size(); i++){
if (nums[i] >= 0){
positive *= nums[i];
negative *= nums[i];
}
else{
int tmp = positive;
positive = negative * nums[i];
negative = tmp * nums[i];
}
if (positive > maxNum)
maxNum = positive;
if (positive <= 0)
positive = 1;
if (negative >= 0)
negative = 1;
}
return maxNum;
}
};