動態規劃之三乘積最大子陣列

2022-01-12 14:52:45 字數 1063 閱讀 4069

題目描述:給你乙個整數陣列 nums ,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含乙個數字),並返回該子陣列所對應的乘積。

示例 1:

輸入: [2,3,-2,4] 輸出: 6

解釋: 子陣列 [2,3] 有最大乘積 6。

示例 2:

輸入: [-2,0,-1] 輸出: 0

解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。

解題思路

這一題和最大子陣列和不同的地方在於,加法只要累加就可以找到最大和,但是乘法會出現負負得正的場景。所以,當乙個負數 × 負數的最小值,就能得到乙個最大值。為了解決這種問題,需要同時記錄最大值和最小值,最大值遇到負數會變成最小值,最小值遇到負數會變成最大值。

同時該題並不需要維護乙個dp陣列,因為最大值乘積是乙個數值,並且這個數值只和當前數值與前乙個最大值和最小值有關,所以維護乙個最大值和乙個最小值就能夠完成求解。

def max_multiply(arr):

max_value = arr[0]

min_value = arr[0]

res = arr[0]

for i in arr[1:]:

pre_max = max_value

# 先求出最大值,再和當前值比較,找到最大值

max_value = max(i, max(i*max_value,i*min_value))

# 先求出最小值,在和當前值比較,找到最小值

min_value = min(i, min(i*pre_max,i*min_value))

res = max(max_value,res)

return res

arr = [5,6,-3,4,-3]

res = max_multiply(arr)

print(res)

152 乘積最大子陣列(動態規劃)

1.問題描述 給你乙個整數陣列 nums 請你找出陣列中乘積最大的連續子陣列 該子陣列中至少包含乙個數字 並返回該子陣列所對應的乘積。示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。...

動態規劃 最大子陣列

解題思路 對於這樣乙個連續和的問題 個人習慣叫做最大連續和 如果我們要用動態規劃來解,首先得考慮狀態和狀態轉移方程。如果我們把題述陣列看成序列,那麼是不是可以用序列dp來考慮呢?我們不妨考慮乙個這樣的序列 1,3,5,2,4 a i 表示這個序列的第 i 個元素,dp i 表示最後乙個元素是a i ...

乘積最大子陣列

leetcode 乘積最大子陣列 一開始我並沒有用dp 而是分情況討論的,即通過0將資料分為幾段,因為含有0的必定會使結果為0 然後就是考慮負數 在所分的每段裡計算乘積,如果負數個數為奇數,將最後出現的那段除掉,然後輸出最大值再比較 非常長 但是可以跑過 長的我自己都不想看,沒臉看,看不明白啊,娘的...