golang 子陣列最大乘積

2021-10-23 00:24:00 字數 969 閱讀 2607

leetcode題目152

輸入 [2,3,-2,4] 返回 6

輸入 [-2,0,-1] 返回 0

題目分析: 動態規劃中等難度的題目,最大乘積具有後無效性

由於乘法具有負負得正的特性,所以需要記錄當前最大與當前最小值,這樣可以確保遇到負數的時候及時翻轉結果。

記陣列為a,最大乘積為imax,上乙個最大乘積為premax, 上乙個最小乘積為premin, 狀態轉移方程

i ma

x[i]

=max

(pre

max∗

a[i]

,pre

min∗

a[i]

,a[i

])

imax[i]=max(premax*a[i], premin*a[i], a[i])

imax[i

]=ma

x(pr

emax

∗a[i

],pr

emin

∗a[i

],a[

i])對應的**是

package main

import "fmt"

func max(x, y int) int else

}func main()

//var a = int

// imax=max(a[i], premax*a[i], premin*a[i])

premax, premin, imax := a[0], a[0], a[0]

for i := 1; i < len(a); i++

premax = max(a[i]*premax, a[i])

premin = max(a[i]*premin, a[i])

imax = max(premax, premin)

} fmt.println(imax)

}

最大乘積子陣列

程式設計之美 上有一道關於在長度為n的陣列中找到n 1個元素乘積最大的題目,不過這並不是本文要討論的。本文討論的是另一種情況,給定乙個長度為n的浮點陣列,找乙個長度任意的子陣列 子陣列的元素在原陣列中是連續存放的 這個子陣列的乘積最大。通常,找乙個滿足指定條件子陣列都會使用動態規劃。遞迴縮小問題規模...

子陣列最大乘積

給定乙個double型別的陣列arr,其中的元素可正可負可0,返回子陣列累乘的最大乘積。例如arr 2.5,4,0,3,0.5,8,1 子陣列 3,0.5,8 累乘可以獲得最大的乘積12,所以返回12。解析 此題可以運用動態規劃解決 設f i 表示以i為結尾的最大值,g i 表示以i結尾的最小值,那...

子陣列最大乘積

給定乙個double型別的陣列arr,其中的元素可正可負可0,返回子陣列累乘的最大乘積。例如arr 2.5,4,0,3,0.5,8,1 子陣列 3,0.5,8 累乘可以獲得最大的乘積12,所以返回12。分析 設f i 表示以i為結尾的最大值,g i 表示以i結尾的最小值,那麼 f i 1 的最大值與...