動態規劃 最大連乘子串行

2021-09-14 00:51:44 字數 646 閱讀 2795

昨天去富途面試實習生的時候問到了這樣的一道題,記錄一下。

求出一串數的最大連乘子串行的乘積。所謂最大連乘子串行,就是指連續的子串行中的乘積最大的那個子串行,比如,2*4*(-6)*(-2)就是乘積最大的連續子串行,結果為96。

迴圈暴力破解法,就是窮舉所有的子串,然後求出乘積最大的那個,時間複雜度為o(n

2)

o(n^2)

o(n2)。

採用動態規劃的思想。

從左到右記錄:以某個數 nums[i] 結尾的最小連乘(min_cur)和最大連乘(max_cur),然後最終選出最大的那個。之所以要記錄最小連乘,是因為數字中可能存在負數,當到達乙個負數時,乘上上一次的最小連乘才能得出以目前數作為結尾的最大連乘。

最小連乘和最大連乘是從三個值中進行選擇,分別是max_cur*nums[i],min_cur*nums[i])和nums[i]。前兩個好理解,第三個是因為有可能不乘上前面的數,自己更大或更小,比如nums[i]是正數,而前面乙個數剛好是0,自然就要在這裡截斷。

double

maxproduct

(double nums,

int size)

}return max_final;

}

最大連續子串行之和(動態規劃)

1.問題描述 設n個元素的序列儲存在陣列a 0.n 1 中,求陣列中連續子串行之和的最大值。2.遞推公式 設all i 為子問題a i.n 1 的連續子串行之和的最大值,start i 為從a i 開始的連續序列之和的最大值,因此 all i a n 1 i n 1時,all i maxi 0,1,...

動態規劃 最大連續子串行乘積

題目描述 給定乙個浮點數序列 可能有正數 0和負數 求出乙個最大的連續子串行乘積。分析 若暴力求解,需要o n 3 時間,太低效,故使用動態規劃。設data i 第i個資料,dp i 以第i個數結尾的連續子串行最大乘積,若題目要求的是最大連續子串行和,則易確定狀態轉移方程為 dp i max dat...

最大連續子串行 DP動態規劃

時間限制 1 sec 記憶體限制 128 mb 提交 44 解決 20 提交 狀態 討論版 給定 k 個整數的序列 其任意連續子串行可表示為 其中1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列 其最大連續子串行為 最大和為20。編寫程式得到其中最大子串行的和並輸出該子...