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

Posted 捡贝壳的人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)相关的知识,希望对你有一定的参考价值。

群里看到这道题,用python做了做, 

def find(array):
    v_sum = greatest = 0
    for a in array:
        v_sum += a
        v_sum = 0 if v_sum < 0 else v_sum
        greatest = v_sum if v_sum > greatest else greatest

    if v_sum == 0:
        greatest = array[0]
        for a in array:
            greatest = a if greatest < a else greatest

    print greatest


arr1 = [1, 2, -4, 3, 3]
find(arr1)

思路:从左到右递加, 如果v_sum为正,可以继续加到后面的元素上,

如果v_sum已经为负,就需要将原有的v_sum清为0, 如果v_sum清0了 跟greatest 就不是一一同步的,

最后比较greatest和v_sum取大值,需要注意的是 如果列表全是负值, 那么greatest的值 就是迭代下列表取最大值。

以上是关于输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)的主要内容,如果未能解决你的问题,请参考以下文章

最大二维子数组求和~

输入一个整型数组,数组里有正数,也有负数。求所有子数组的和的最大值

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)(解决)

剑指offer系列56---连续子数组的最大和

返回一个整形数组中最大子数组的和

连续子数组最大和