劍指Offer(三十):連續子數組的最大和

.# 劍指Offer(三十):連續子數組的最大和python

搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨git

csdn:https://blog.csdn.net/baidu_31657889/github

github:https://github.com/aimi-cn/AILearners算法

1、引子

這個系列是我在牛客網上刷《劍指Offer》的刷題筆記,旨在提高下本身的算法能力。
查看完整的劍指Offer算法題解析請點擊CSDN和github連接:
劍指Offer完整習題解析CSDN地址
github地址編程

2、題目

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」系列資訊類文章,歡迎您的關注!

相關文章
相關標籤/搜索