面试题

python算法:最大连续子数和

2017-11-24  本文已影响14人  python小玩家

题目:给定数组a[1…n],求最大子数组和,即找出1<=i<=j<=n,使a[i]+a[i+1]+…+a[j]最大。

思路:遍历一遍进行累加sum, 申请变量ans保存当前最大值,如果sum<0时候进行清空,这样,ans总是可以保持最大。
时间复杂度为O(n)
如果全负数的输入,直接返回最大的一个值即可


# 给定数组a[1…n],求最大连续子数组和,即找出1<=i<=j<=n,使a[i]+a[i+1]+…+a[j]最大

class MaxSum(object):
    def __init__(self, init_list):
        self.l = init_list
        self.subl = []

    def max_sum(self):
        sum = 0
        ans = 0

        if max(self.l) < 0:
            return max(self.l)

        for x in self.l:
            sum += x
            ans = sum if sum > ans else ans
            print 'x:%s, sum:%s  ans:%s'%(x, sum,ans)
            if sum < 0: sum = 0

        return ans

if __name__ == '__main__':
    test=[-1, -1,-5,-5,-1,-33,-10]
    n = MaxSum(test)
    print n.max_sum()
上一篇 下一篇

猜你喜欢

热点阅读