用Python語言描述最大連續子序列和

小云云
發布: 2017-12-06 10:42:58
原創
3710 人瀏覽過

求最大連續子序列的和是一個很經典很古老的面試題了,本文我們就和大家分享關於用Python語言描述最大連續子序列和方法,希望能幫助到大家。

1.問題描述

假設有一數組(python裡為list啦)[1,3,-3,4,-6,-1],求數組中最大連續子序列的和。例如在此數組中,最大連續子序列的和為5,即1+3+(-3)+4 = 5

2.O(n2)的解法

最簡單粗暴的方式,雙層循環,用一個maxsum標識最大連續子序列和。然後每次判斷更新。沒有太多可以說的,直接上程式碼


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)解法

在任何講動態規範的地方都能找到求最大連續子序列和的例子。具體來說,假設數組為a[i],因為最大連續的子序列和必須是在位置0-(n-1)之間的某個位置結束。那麼,當循環遍歷到第i個位置時,如果其前面的連續子序列和小於等於0,那麼以位置i結尾的最大連續子序列和就是第i個位置的值即a[i]。如果其前面的連續子序列和大於0,則以位置i結尾的最大連續子序列和為b[i] = max{ b[i-1]+a[i],a[i]},其中b [i]就是指最大連續子序列的和。


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語言描述最大連續子序列和教程,希望對能幫助大家。

相關建議:

最大連續子序列與問題

#完全掌握 Python

python版簡單工廠模式的介紹#

以上是用Python語言描述最大連續子序列和的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!