.# 劍指Offer(三十):連續子數組的最大和python
搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨git
csdn:https://blog.csdn.net/baidu_31657889/github
github:https://github.com/aimi-cn/AILearners算法
這個系列是我在牛客網上刷《劍指Offer》的刷題筆記,旨在提高下本身的算法能力。
查看完整的劍指Offer算法題解析請點擊CSDN和github連接:
劍指Offer完整習題解析CSDN地址
github地址編程
HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同窗。今天測試組開完會後,他又發話了:在古老的一維模式識別中,經常須要計算連續子向量的最大和,當向量全爲正數的時候,問題很好解決。可是,若是向量中包含負數,是否應該包含某個負數,並指望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和爲8(從第0個開始,到第3個爲止)。給一個數組,返回它的最大連續子序列的和,你會不會被他忽悠住?(子向量的長度至少是1)數組
數組分析:下圖是咱們計算數組(1,-2,3,10,-4,7,2,-5)中子數組的最大和的過程。經過分析咱們發現,累加的子數組和,若是大於零,那麼咱們繼續累加就行;不然,則須要剔除原來的累加和從新開始。微信
過程以下:機器學習
python學習
代碼實現方案:測試
# -*- coding:utf-8 -*-
class Solution:
def FindGreatestSumOfSubArray(self, array):
# write code here
if len(array) == 0:
return 0
# 初始化變量,maxSum爲最大和,curSum爲當前和
curSum = array[0]
maxSum = array[0]
# 遍歷剩下的全部元素
for i in array[1:]:
# 若是當前和小於等於0,說明以前的是負數,則拋棄前面的和,從新計算
if curSum <=0:
curSum = i
# 若是沒有問題,直接累加
else:
curSum += i
# 更新最大和
if curSum > maxSum:
maxSum = curSum
return maxSum複製代碼
AIMI-CN AI學習交流羣【1015286623】 獲取更多AI資料
分享技術,樂享生活:咱們的公衆號計算機視覺這件小事每週推送「AI」系列資訊類文章,歡迎您的關注!