这道题跟 连续子数组的最大和 类似,唯一的区别在于这题是乘积,负数的影响在于会把当前最大变成当前最小,会把当前最小变成当前最大。因此需要另一个当前最小的变量,一旦nums[i]<0,那么就把当前最大和当前最小对调。
var maxProduct = function(nums) {
if(nums.length===1) return nums[0];
var global_max=-Number.MAX_VALUE,max=1,min=1;
for(var i=0,len=nums.length;i<len;i++){
if(nums[i]<0){
var temp=max;
max=min;
min=temp;
}
max=Math.max(max*nums[i],nums[i]);
min=Math.min(min*nums[i],nums[i]);
global_max=Math.max(global_max,max);
}
return global_max;
};