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
.
解题思路:
This is similar to maximum subarray. Instead of sum, the sign of number affect the product value.
When iterating the array, each element has two possibilities: positive number or negative number. We need to track a minimum value, so that when a negative number is given, it can also find the maximum value. We define two local variables, one tracks the maximum and the other tracks the minimum.
Java code:
public class Solution { public int maxProduct(int[] nums) { int result = nums[0]; int max = nums[0]; int min = nums[0]; for(int i = 1; i< nums.length; i++) { int temp = max; max = Math.max(Math.max(nums[i], nums[i] * temp), nums[i] * min); min = Math.min(Math.min(nums[i], nums[i] * temp), nums[i] * min); result = Math.max(max, result); } return result; } }
Reference:
1. http://www.programcreek.com/2014/03/leetcode-maximum-product-subarray-java/