152. Maximum Product Subarray
和53. Maximum Subarray是一个思路,所以在一起做了,主要就是维护一个局部最优和一个全局最优。
不同在于,因为是有正负数,负号会导致上一轮的最小可能在这轮成为最大的,所以每一次不仅要记录一个局部最大解,还要记录一个局部最小解。
1 public int maxProduct(int[] nums) { 2 if(nums == null || nums.length == 0) { 3 return 0; 4 } 5 int localMax = nums[0]; 6 int localMin = nums[0]; 7 int global = nums[0]; 8 for(int i = 1; i < nums.length; i++) { 9 int temp = localMax; 10 localMax = Math.max(nums[i], Math.max(nums[i] * localMax, nums[i] * localMin)); 11 localMin = Math.min(nums[i], Math.min(nums[i] * temp, nums[i] * localMin)); 12 global = Math.max(global, Math.max(localMax, localMin)); 13 } 14 return global; 15 }
bug记录:
第9行,因为localMax计算过一次,所以在第11行的时候已经更新了,所以要先记录一下。