美文网首页面试题
python算法:最大连续子数和

python算法:最大连续子数和

作者: python小玩家 | 来源:发表于2017-11-24 17:12 被阅读14次

    题目:给定数组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()
    

    相关文章

      网友评论

        本文标题:python算法:最大连续子数和

        本文链接:https://www.haomeiwen.com/subject/ezxfbxtx.html