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,所以在处理乘法时,除了维护一个局部最大值,还要维护一个局部最小值。
class Solution {
public int maxProduct(int[] nums) {
if (nums.length == 0)
return 0;
if (nums.length == 1)
return nums[0];
int maxsofar = nums[0];
int maxherepre = nums[0];
int minherepre = nums[0];
int maxhere, minhere;
for (int i = 1; i < nums.length; i++) {
maxhere = Math.max(Math.max(maxherepre * nums[i], minherepre * nums[i]), nums[i]);
minhere = Math.min(Math.min(maxherepre * nums[i], minherepre * nums[i]), nums[i]);
maxsofar = Math.max(maxhere, maxsofar);
maxherepre = maxhere;
minherepre = minhere;
}
return maxsofar;
}
}
分享: 标签:Product,152,return,nums,int,maxsofar,product,Subarray,Math From: https://www.cnblogs.com/MarkLeeBYR/p/16910024.html