152 乘積最大子陣列

2021-10-20 17:38:39 字數 1348 閱讀 5176

題目描述

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

示例 1:

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

輸出: 6

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

示例 2:

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

輸出: 0

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

題解:

動態規劃。

f[i]表示以nums[i]結尾,nums[0...i]中最大子陣列乘積,轉移方程:f[i] = max

如果這題是最大連續子陣列和問題,這個方程沒問題,但是這題是乘積,乘積意味著可以負負得正,可能得到更大的結果。

假設nums =,按上述轉移得到的f =,最大結果為30,而實際結果為所有元素的乘積,出現這種情況就是因為我們少考慮了負數的情況。

所以,我們需要維護乙個fmin[i],表示以nums[i]結尾,nums[0...i]中最小子陣列乘積,設前面的f[i]重新記為fmax[i],那麼轉移方程為:

時間複雜度:o(n

)o(n)

o(n)

額外空間複雜度:o(n

)o(n)

o(n)

class

solution);

fmin[i]

=min()

; ret =

max( ret, fmax[i]);

}return ret;}}

;/*記憶體:11.7mb,擊敗:58.58%

*/

可以發現,f只跟f[i - 1]有關,使用滾動陣列優化:

class

solution);

fmin =

min();

ret =

max();

}return ret;}}

;/*記憶體:11.3mb,擊敗:98.81%

*/

152 乘積最大子陣列

152.乘積最大子陣列 class solution def maxproduct self,nums list int int dp nums i for i in range len nums for j in range len nums max product dp 0 0 for i in...

152 乘積最大子陣列

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

152 乘積最大子陣列

類似於53題最大子序和,給乙個整數陣列 nums 找出陣列中乘積最大的連續子陣列 該子陣列中至少包含乙個數字 並返回該子陣列所對應的乘積。乘積最大,連續子陣列 乘積最大的連續子陣列,使用動態規劃方法 class solution def maxproduct self,nums if not num...