LeetCode 152. Maximum Product Subarray
原题链接在这里:https://leetcode.com/problems/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
.
题解:
与Maximum Subarray类似。但出了要维护一个局部最大量外还需要同时多维护一个局部最小量。
e.g.[-2,3,-4], 若不维护局部最小量, i = 1时,局部最大是3, 全局最大也是3, i=2时, 局部最大变成-4, 全局最大变成3, 但实际全局最大应该是8. 这是因为负数与负数相乘可能会产生一个很大的正数,与加法只要是负一定变小不同。
所以要同时维护一个局部最小变量,以防当前值是负数。
Time Complexity: O(n). Space: O(1).
AC Java:
1 public class Solution { 2 public int maxProduct(int[] nums) { 3 if(nums == null || nums.length == 0){ 4 return 0; 5 } 6 int localMax = nums[0]; 7 int localMin = nums[0]; 8 int globalMax = nums[0]; 9 for(int i = 1; i<nums.length; i++){ 10 int temp = localMax; 11 localMax = Math.max(Math.max(temp*nums[i], nums[i]), localMin*nums[i]); 12 localMin = Math.min(Math.min(localMin*nums[i], nums[i]), temp*nums[i]); 13 globalMax = Math.max(globalMax, localMax); 14 } 15 return globalMax; 16 } 17 }