Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example 1:
Input: [2,3,-2,4] Output: 6 Explanation: [2,3] has the largest product
6.Example 2:
Input: [-2,0,-1] Output: 0 Explanation: The result cannot be 2,
because [-2,-1] is not a subarray.
思路:由于存在负负相乘得正,记录i-1之前的最小乘积,i-1之前的最大乘积
class Solution {
public int maxProduct(int[] nums) {
int n = nums.length;
if(n == 1 ){
return nums[0];
}
int pmax = nums[0];
int pmin = nums[0];
int max = nums[0];
for(int i = 1; i < n ; i++) {
int t = pmax;
pmax = Math.max(Math.max(nums[i] * t, nums[i]), nums[i] * pmin);
pmin = Math.min(Math.min(nums[i] * t, nums[i]), nums[i] * pmin);
max = Math.max(max, pmax);
}
return max;
}
}