152. 乘积最大子数组

// GoLang
func maxProduct(nums []int) int {
    var length int = len(nums)
    var res int = nums[0]
    var dpMax, dpMin []int = make([]int, length), make([]int, length)
    var getMax func(a, b int) int
    var getMin func(a, b int) int

    getMax = func(a, b int) int{
        if a>=b{ return a }else{ return b }
    }
    getMin = func(a, b int) int{
        if a<=b{ return a }else{ return b }
    }

    dpMax[0], dpMin[0] = nums[0], nums[0]
    for k, v := range(nums){
        if k==0{ continue }
        dpMax[k] = getMax(v, dpMax[k-1]*v)
        dpMax[k] = getMax(dpMax[k], dpMin[k-1]*v)
        dpMin[k] = getMin(v, dpMin[k-1]*v)
        dpMin[k] = getMin(dpMin[k], dpMax[k-1]*v) 
        res = getMax(res, dpMax[k])
    }
    return res
}
// Java
class Solution {
    public int maxProduct(int[] nums) {
        int key_max, key_min, res;
        key_min = nums[0];
        key_max = nums[0];
        res = nums[0];

        for(int i=1; i<nums.length; i++){
            int tmp_max, tmp_min;
            tmp_max = Math.max(key_max*nums[i], key_min*nums[i]);
            tmp_max = Math.max(tmp_max, nums[i]);
            tmp_min = Math.min(key_max*nums[i], key_min*nums[i]);
            tmp_min = Math.min(tmp_min, nums[i]);

            key_max = tmp_max;
            key_min = tmp_min;
            res = Math.max(key_max, res);
        }
        return res;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值