【数组】Maximum Product Subarray

题目:

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.

思路:

其实子数组乘积最大值的可能性为:累乘的最大值碰到了一个正数;或者,累乘的最小值(负数),碰到了一个负数。所以每次要保存累乘的最大(正数)和最小值(负数)。同时还有一个选择起点的逻辑,如果之前的最大和最小值同当前元素相乘之后,没有当前元素大(或小)那么当前元素就可作为新的起点。例如,前一个元素为0的情况,{1,0,9,2},到9的时候9应该作为一个最大值,也就是新的起点,{1,0,-9,-2}也是同样道理,-9比当前最小值还小,所以更新为当前最小值。

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxProduct = function(nums) {
    var pro=nums[0],maxpro=nums[0],minpro=nums[0];
    for(var i=1;i<nums.length;i++){
        var maxtemp=maxpro;
        maxpro=Math.max(Math.max(maxpro*nums[i],minpro*nums[i]),nums[i]);
        minpro=Math.min(Math.min(maxtemp*nums[i],minpro*nums[i]),nums[i]);
        pro=Math.max(maxpro,pro);
    }
    
    return pro;
};

 

posted @ 2016-01-10 20:55  很好玩  阅读(188)  评论(0编辑  收藏  举报