中文english
找出乙個序列中乘積最大的連續子串行(至少包含乙個數)。
樣例 1:
輸入:[2,3,-2,4]
輸出:6
樣例 2:
輸入:[-1,2,4,1]
輸出:8
陣列長度不超過20000
乘積最大的子串行的積,小於2147483647
輸入測試資料 (每行乙個引數)如何理解測試資料?
classsolution:
"""@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...