152. Maximum Product Subarray
Given an integer array nums, find a subarray that has the largest product, and return the product.
The test cases are generated so that the answer will fit in a 32-bit integer.
Example 1:
Input: nums = [2,3,-2,4] Output: 6 Explanation: [2,3] has the largest product 6.
Example 2:
Input: nums = [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
//要考虑特殊情况,即负数和负数相乘,如2,-3,-7,所以在处理乘法时,除了维护一个局部最大值,还要维护一个局部最小值。
public int maxProduct(int[] nums) {
if (nums.length == 0)
return 0;
if (nums.length == 1)
return nums[0];
int max = Integer.MIN_VALUE;
int maxPre = nums[0];
int minPre = nums[0];
int maxHere, minHere;
for (int i = 1; i < nums.length; i++) {
maxHere = Math.max(Math.max(maxPre * nums[i], minPre * nums[i]), nums[i]);
minHere = Math.min(Math.min(maxPre * nums[i], minPre * nums[i]), nums[i]);
max = Math.max(maxHere, max);
maxPre = maxHere;
minPre = minHere;
}
return max;
}
浙公网安备 33010602011771号