1. 程式人生 > >劍指Offer 30. 連續子陣列的最大和 (陣列)

劍指Offer 30. 連續子陣列的最大和 (陣列)

題目描述

HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和為8(從第0個開始,到第3個為止)。給一個數組,返回它的最大連續子序列的和,你會不會被他忽悠住?(子向量的長度至少是1)

題目地址

https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tqId=11183&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路

陣列分析:下圖是我們計算陣列(1,-2,3,10,-4,7,2,-5)中子陣列的最大和的過程。通過分析我們發現,累加的子陣列和,如果大於零,那麼我們繼續累加就行;否則,則需要剔除原來的累加和重新開始。

過程如下:

clip_image001

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)