[leetcode-152-Maximum Product Subarray]

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.

思路:

因为数组里面可能存在负数,那么乘积由i-1时候的最大,如果nums[i]为负数,则到i的时候就变成最小了,于是用两个数组分别记录

到数组i为止的最大值和最小值。

int maxProduct(vector<int>& nums)
{
  int maxpro =nums[0];
  vector<int> proMax(nums.size());
  vector<int> proMin(nums.size());
  proMax[0] = nums[0];
  proMin[0] = nums[0];
  for(int i=1;i<nums.size();i++)
  {
    proMax[i] = max(nums[i],max(proMax[i-1]*nums[i],proMin[i-1]*nums[i]));
    proMin[i] = min(nums[i],min(proMax[i-1]*nums[i],proMin[i-1]*nums[i]));
    maxpro = max(proMax[i],maxpro);
  }
  return maxpro;
}

参考:

https://discuss.leetcode.com/topic/3581/share-my-dp-code-that-got-ac

原文地址:https://www.cnblogs.com/hellowooorld/p/7308234.html