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.
思路:这题因为有负数,As we know that on multiplying with negative number max will become min and min will become max, so why not as soon as we encounter negative element, we swap the max and min already. Maximum Non Negative Product in a Matrix 一起看,思路一模一样;
class Solution {
public int maxProduct(int[] nums) {
int max = nums[0];
int min = nums[0];
int globalmax = nums[0];
for(int i = 1; i < nums.length; i++) {
if(nums[i] < 0) {
int temp = max;
max = min;
min = temp;
}
max = Math.max(nums[i], max * nums[i]);
min = Math.min(nums[i], min * nums[i]);
globalmax = Math.max(globalmax, max);
}
return globalmax;
}
}