面試42題:
題目:連續子數組的最大和
題:輸入一個整形數組,數組里有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。要求時間復雜度為O(n)
解題思路:在數組里從前向后遍歷,記錄下每次的“當前累加子數組和”和“當前的最大子數組和”(其本身包含“動態規划”的思想,詳見劍指offer P220)
解題代碼:
# -*- coding:utf-8 -*- class Solution: g_InvalidInput=False def FindGreatestSumOfSubArray(self, array): # write code here if not array or len(array)<=0: g_InvalidInput=True return 0 g_InvalidInput=False curSum=0 greatSum=float('-inf') for i in array: if curSum<=0: curSum=i else: curSum+=i if curSum>greatSum: greatSum=curSum return greatSum
