昨天去富途面試實習生的時候問到了這樣的一道題,記錄一下。
求出一串數的最大連乘子串行的乘積。所謂最大連乘子串行,就是指連續的子串行中的乘積最大的那個子串行,比如,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。編寫程式得到其中最大子串行的和並輸出該子...