剑指offer 面试42题
面试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