馬上要開始找工作了,做些題目練練手。
源**:(在vc6下通過編譯,正確執行)
的理解更加清晰了,在此向作者表示感謝。
最大子段和問題的動態規劃求解
1. 基本原理
設陣列為a[k],1≤k≤n,最大子段和x 被定義為:
jx = max
1≤i≤j ≤n k=i
不妨設:
j
b[j ] = max
1 ≤j ≤n k=m
其中m 是可變的。注意:a[j]必須是b[j]這個最大區域性受限子段和所對應子段的最右端,
好好理解此處j 和b[j]的含義是整個演算法的關鍵!
根據b[j]和x 的定義,不難發現:
x = max b[j ]
1≤j ≤n
另一方面,根據b[j]的定義,可以看出:
當b[j-1]>0 時,無論a[j]為何值,b[j]=b[j-1]+a[j];
當b[j-1]≤0 時,無論a[j]為何值,b[j]=a[j];
所以有:
b[j ] = max
1≤j ≤n
2. 具體例項
k 1 2 3 4
a[k] 3 -4 2 10
b[k] 3 -1 2 12
其中:b[1]=a[1],b[2]=b[1]+a[2],b[3]=a[3],b[4]=b[3]+a[4] ;因此,對於陣列a 而言,
最大子段和為b[4],即x=12 。
3. 程式設計實現
略,針對陣列a 進行一遍掃瞄即可。演算法實現的時間複雜度只有o(n)。
求乙個整型陣列的最大子陣列的和
團隊成員 遲真真 馮小蘭 求乙個整型陣列的最大子陣列的和 看到這個題目,是這樣想的 子陣列的元素個數為1個,2個,3個 n個 include define m 100 void main while n 0 比較相鄰2,3。n個相鄰元素時的最大值 if m max n printf 最大為 d ma...
返回乙個整型陣列中最大子陣列的和
1.題目 返回乙個整數陣列中最大子陣列的和。要求 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 2.設計思想 本題目最大的難點是如何找出子陣列並且時間複雜度為o n 我的思路是 從總左邊 a ...
演算法 求乙個陣列的最大子陣列
思路 1 全負數 取最大的數即可 2 存在非負數 遇見負數就不加,然後和前乙個子串行的和做比較,取大的 public class maxchildarray return items items.length 1 不是全負數的情況,sum必定大於等於0 int sum 0 int partsum 0...