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)
{
int res = nums[0];
int minn = nums[0];
int maxx = nums[0];
for(int i = 1; i< nums.size();i++)
{
int x = maxx*nums[i];
int y = minn*nums[i];
maxx = max(max(x, y), nums[i]);
minn = min(min(x, y), nums[i]);
res = max(res, maxx);
}
return res;
}
};