#方法1: 枚举所有子数组,求最大值O(n**2)
def FindGreatSumOfSubArray(array):
n=len(array)
sm=[]
for i in range(n-1):
for j in range(i+1,n):
sm.append(sum(array[i:j]))
return max(sm) if max(sm)>max(array) else max(array)
array=[1,-2,3,10,-4,7,2,-5]
FindGreatSumOfSubArray(array)
#方法2:举例分析数组规律,求最大值O(n)
def FindGreatSumOfSubArray(arrlist):
n=len(arrlist)
if len(arrlist)<0 or not arrlist:
return -1
cursm=0
sm=0
for i in range(n):
if cursm<=0:
cursm=arrlist[i]
else:
cursm=cursm+arrlist[i]
if cursm > sm:
sm=cursm
return sm
array=[1,-2,3,10,-4,7,2,-5]
FindGreatSumOfSubArray(array)
#方法3:动态规划
# def FindGreatSumOfSubArray(arrlist):
# n=len(arrlist)
# sm,cursm=arrlist[0],arrlist[0]
# for i in range(1,n):
# if cursm<=0:
# cursm=arrlist[i]
# else:
# cursm=arrlist[i]+cursm
# if cursm>sm:
# sm=cursm
# return sm
def FindGreatSumOfSubArray(arr):
if len(arr)==1:
return arr
if len(arr)<1:
return
n = len(arr)
dp = [0]*n
dp[0]=1
for i in range(1, n):
dp[i] = arr[i] if dp[i-1]<=0 else dp[i-1]+arr[i]
return max(dp)
array=[1,-2,3,10,-4,7,2,-5]
FindGreatSumOfSubArray(array)