Python語言描述最大連續(xù)子序列和
求最大連續(xù)子序列的和是一個很經典很古老的面試題了,記得在剛畢業(yè)找工作面試那會也遇到過同款問題。今兒突然想起來,正好快到畢業(yè)季,又該是苦逼的應屆生們各種面試的時候到了,就給寫了一些小代碼解決這個問題。也希望各位找工作的同志們都拿到心目中理想的offer,從此以后,戰(zhàn)勝高富帥,贏取白富美,走上人生巔峰。
1.問題描述
假設有一數組(python里為list啦)[1,3,-3,4,-6,-1],求數組中最大連續(xù)子序列的和。例如在此數組中,最大連續(xù)子序列的和為5,即1+3+(-3)+4 = 5
2.O(n2)的解法
最簡單粗暴的方式,雙層循環(huán),用一個maxsum標識最大連續(xù)子序列和。然后每次判斷更新。沒有太多可以說的,直接上代碼
def maxSum(list):
maxsum = list[0]
for i in range(len(list)):
maxtmp = 0
for j in range(i,len(list)):
maxtmp += list[j]
if maxtmp > maxsum:
maxsum = maxtmp
return maxsum
if __name__ == '__main__':
list = [1,3,-3,4,-6]
maxsum = maxSum(list)
print "maxsum is",maxsum
運行結果
maxsum is 5
3.O(n)解法
在任何講動態(tài)規(guī)范的地方都能找到求最大連續(xù)子序列和的例子。具體來說,假設數組為a[i],因為最大連續(xù)的子序列和必須是在位置0-(n-1)之間的某個位置結束。那么,當循環(huán)遍歷到第i個位置時,如果其前面的連續(xù)子序列和小于等于0,那么以位置i結尾的最大連續(xù)子序列和就是第i個位置的值即a[i]。如果其前面的連續(xù)子序列和大于0,則以位置i結尾的最大連續(xù)子序列和為b[i] = max{ b[i-1]+a[i],a[i]},其中b[i]就是指最大連續(xù)子序列的和。
def maxSum(list_of_nums):
maxsum = 0
maxtmp = 0
for i in range(len(list_of_nums)):
if maxtmp <= 0:
maxtmp = list_of_nums[i]
else:
maxtmp += list_of_nums[i]
if(maxtmp > maxsum):
maxsum = maxtmp
return maxsum
if __name__ == '__main__':
list_of_num = [1,3,-3,4,-6]
maxsum = maxSum(list_of_num)
print "maxsum is: ",maxsum
運行結果
maxsum is 5
總結
以上就是本文關于Python語言描述最大連續(xù)子序列和的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
利用Numba與Cython結合提升python運行效率詳解
近些年來, Numba和Cython在數學科學界得到了廣泛的關注。它們都提供了一種加速CPU密集型任務的方法,但以不同的方式。本文描述了它們之間體系結構的差異2021-09-09
Flask框架學習筆記(一)安裝篇(windows安裝與centos安裝)
Flask是一個輕量級的Web應用框架, 使用Python編寫。Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension 增加其他功能。2014-06-06

