191 乘積最大子串行 兩個最值型動態規劃

2022-02-14 23:29:58 字數 1104 閱讀 7381

中文english

找出乙個序列中乘積最大的連續子串行(至少包含乙個數)。

樣例 1:

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

輸出:6

樣例 2:

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

輸出:8

陣列長度不超過20000

乘積最大的子串行的積,小於2147483647 

輸入測試資料 (每行乙個引數)如何理解測試資料?

class

solution:

"""@param nums: an array of integers

@return: an integer

"""'''

大致思路:

1.最值型動態規劃,dp[j] 需要保證前面的是最大或者是最小,乘積,然後最後根據這個前面的最值乘積相差(注意,是子串行,不要求連續)

同時保留兩個極值

如果a[j]是正數,我們希望以a[j-1

]結尾的連續子串行乘積最大

如果a[j]是負數,我們希望以a[j-1

]結尾的連續子串行乘積最小

'''def maxproduct(self, nums):

if not nums:return0#

l =len(nums)

#每次放入的是最大值f,每次放入的是最小值g

f = [0]*l

g = [0]*l

for i in

range(l):

f[i] = g[i] =nums[i]

#注意,i > 0是避免i - 1 越界,上面i = 0

,一次賦值即可

if (i > 0

): #求最大,可能是--得到最大值的情況

f[i] = max(f[i],max(f[i - 1]*nums[i],g[i - 1]*nums[i]))

g[i] = min(g[i],min(g[i - 1]*nums[i],f[i - 1]*nums[i]))

#最後在取出最大值即可

return

max(f)

求陣列中的兩個最大值

手動輸入乙個儲存整數的陣列,要求輸出陣列裡面的2個最大值。例項 輸入 1,2,5,9,84,3,2 輸出 84,9 手動輸入乙個儲存整數的陣列,要求輸出陣列裡面的2個最大值。例項 輸入 1,2,5,9,84,3,2 輸出 84,9 package 華為機試題 author hutongling ti...

動態規劃之兩個字串的最大子串行

求兩個字串的最大子串行 1 子串行和子字串有區別,子字串 子串 必須連續,列如 s1 abcdab s2 bbcdaab s1和s2最大子串行有 bcda bcdb cdab abab bcab 子串行bcda是s1和s2的乙個lcs s1和s2最大子字串是 bcda 為了找到最長的lcs,我們定義...

如何實現兩個變數的值交換,輸出三個值的最大值

例題 var a 123 var b 234 請使用任意方法交換a和b的值。方法一 定義中間變數 var c c a a b b c 方法二 和方法 兩數之和,和減去其中乙個數,得到的結果為另乙個數 a a b b a 方法三 差方法 兩數之差,被減數減去差,就得到乙個減數 減數加上差就得被減數 a...