王老头

导航

求数组中所有子数组中最大的和

题目描述:

输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。

例如输入的数组为8,-4,6,-1,3,7,2,-3,和最大的子数组为8,-4,6,-1,3,7,2, 因此输出为该子数组的和21。

#1. O(n)
while True:
    try:
        str_ = map(int,raw_input().split())
        print(str_)
        ans = -10000
        sumv = 0
        for i in range(len(str_)):
            sumv += str_[i]
            if(sumv > ans):
                ans = sumv
            if(sumv < 0):
                sumv = 0
        print(ans)
    except Exception as e:
        break

 

#2. O(n)
def Maxsum1(str_):
    sumv = 0
    cc = 0
    for i in range(len(str_)):
        if(cc < 0):
            cc = str_[i]
        else:
            cc += str_[i]
        if(sumv < cc):
            sumv = cc
    return sumv

def Maxsum2(str_):
    Msum = str_[0]
    sumv = 0
    for i in range(len(str_)):
        if(sumv>=0):
            sumv+=str_[i]
        else:
            sumv=str_[i]
        if(sumv>Msum):
            Msum = sumv
    return Msum


while True:
    try:
        str_ = map(int,raw_input().split())
        Msum = Maxsum2(str_)
        print(Msum)
    except:
        break

 

##3. O(n2)
def MaxValue(str_):
    Msum = 0
    for i in range(len(str_)):
        sumv = 0
        for j in range(i,len(str_)):
            sumv += str_[j]
            if(sumv > Msum):
                Msum = sumv
    return Msum

while True:
    try:
        str_ = map(int,raw_input().split())
        Msum = MaxValue(str_)
        print(Msum)
    except:
        break

 

posted on 2018-09-18 14:10  王老头  阅读(413)  评论(0)    收藏  举报