Maximum Product Subarray

Maximum Product Subarray

https://oj.leetcode.com/problems/maximum-product-subarray/

  • 遍历数组,想象我们记录一个sub array, 这个sub array里面元素的乘积就对应当前已知的极值。每次访问一个元素时,我们需要更新这个sub array和极值,有两种选择:
    • 把该元素放入考虑的sub array中
    • 抛弃之前累积的sub array, 把该元素当做新的sub array
  • 考虑到数组中的数字有正有负,我们必须同时关注(正的)最大值和(负的)最小值。
public int maxProduct(int[] A) {
  assert A.length > 0;
  int max = A[0], min = A[0], maxAns = A[0]; 
  for (int i = 1; i < A.length; i++) {
      int mx = max, mn = min;
      max = Math.max(Math.max(A[i], mx * A[i]), mn * A[i]);
      min = Math.min(Math.min(A[i], mx * A[i]), mn * A[i]);
      maxAns = Math.max(max, maxAns);
  }
   return maxAns;
}
Written on April 23, 2018