劍指Offer 30. 連續子陣列的最大和 (陣列)
阿新 • • 發佈:2018-11-12
題目描述
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 not array: return 0 maxSum = array[0] tempSum= 0 for x in array: tempSum += x if tempSum > maxSum: maxSum = tempSum if tempSum < 0: tempSum = 0 return maxSum if __name__ == '__main__': result = Solution().FindGreatestSumOfSubArray([2,8,1,5,9]) print(result)