最大連續子串行和問題:
給定k個整數的序列,其任意連續子串行可表示為,其中 1 <= i <= j <= k。最大連續子串行是所有連續子序中元素和最大的乙個。
這個問題的求解思路有很多,可以暴力求解時間複雜度o(n3),也可以使用動態規劃求解時間複雜度o(n),下面的**是採用的分治遞迴求解的時間複雜度o(nlogn)。
def
getcrosssummax
(mylist,lownum,highnum)
: mid=
int(
(lownum+highnum)/2
) i=mid
j=mid+
1 lowsum=mylist[i]
highsum=mylist[j]
tempsum=
0while i>=lownum:
tempsum+=mylist[i]
if tempsum>lowsum:
lowsum=tempsum
i-=1 tempsum=
0while j<=highnum:
tempsum+=mylist[j]
if tempsum>highsum:
highsum=tempsum
j+=1return highsum+lowsum
deffindmaxlist
(mylist,lownum,highnum):if
(lownum==highnum)
:return mylist[lownum]
mid=
int(
(lownum+highnum)/2
) low=findmaxlist(mylist,lownum,mid)
high=findmaxlist(mylist,mid+
1,highnum)
cross=getcrosssummax(mylist,lownum,highnum)
return
max(low,high,cross)
if __name__==
"__main__"
: testlist=[-
2,1,
-3,4
,-1,
2,1,
-5,4
]print
(findmaxlist(testlist,0,
len(testlist)-1
))
最大子串行和 連續
最大子串行和 連續 include using namespace std int maxsum int a,int n return sum int main 測試全是負數的用例 cout 4 cout 8 pause return 0 比如陣列 1,2,3,10,4,7,2,5 最大子串行和為1...
最大子串行和 連續or不連續
coding utf 8 created on sun oct 14 21 10 28 2018 author dell 功能 最大子串行問題 def test func num list 求陣列中最大子串行的和,子串行可以不連續 也可以寫成if判斷語句只累加整數即可 n len num list ...
最大子串行和(分治求法)
這已經是一道家喻戶曉的題了,給出乙個陣列,裡面是一串數字,求出子串行中和最大的,輸出這個和。思路 這道題有很多經典解法,其中最典型應該是動態規劃,而我們今天要討論的是用二分法怎麼求解這道題。include using namespace std int aleng int f int a,int b...