乘积最大子数组

题目描述

https://leetcode-cn.com/problems/maximum-product-subarray/


package main

func maxProduct(nums []int) int {
    if len(nums) == 0 {
        return 0
    }
    var max, min, r = nums[0], nums[0], nums[0]
    for i := 1; i < len(nums); i++ {
        v := nums[i]
        mx, mn := max, min
        max = getMax(mx*v, getMax(v, mn*v))
        min = getMin(mn*v, getMin(v, mx*v))
        r = getMax(r, max)
    }
    return r
}
func getMax(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func getMin(a, b int) int {
    if a < b {
        return a
    }
    return b
}


思路

使用最大和最小两个统计,每次更新最大值是比较最大和最小分别的当前值的乘积。主要难点还是中间那个循环!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容