zoukankan      html  css  js  c++  java
  • 【数组】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;
    };
  • 相关阅读:
    以太坊:深入理解Solidity-Solidity v0.5.0 重大更新
    以太坊:深入理解Solidity-合约
    以太坊:深入理解Solidity-表达式和控制结构
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
  • 原文地址:https://www.cnblogs.com/shytong/p/5119130.html
Copyright © 2011-2022 走看看