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;
}
 
posted @ 2022-11-20 23:12  MarkLeeBYR  阅读(19)  评论(0)    收藏  举报