求数组中所有子数组中最大的和
题目描述:
输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为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
浙公网安备 33010602011771号