对于有负数的乘积来说,最小数乘一个负数就会变成最大数,而最大数乘一个最小数又会变成最小数,所以需要在区间内维护一个最大值和一个最小值
public int maxProduct(int[] nums) {
int res = Integer.MIN_VALUE;
int max = 1,min = 1;
for (int i = 0; i < nums.length; i++) {
if (nums[i] < 0){//遇到负数时要交换最大和最小
int temp = max;
max = min;
min = temp;
}
max = Math.max(max*nums[i],nums[i]);
min = Math.min(min*nums[i],nums[i]);
if (max > res) res = max;
}
return res;
}