題目1 給乙個整型陣列,求最大子串行和

2021-05-05 03:33:23 字數 987 閱讀 3107

馬上要開始找工作了,做些題目練練手。

源**:(在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...