数组中的连续子数组(包含至少一个数字),其总和最大

时间:2018-06-10 12:10:11

标签: python algorithm

下面的代码实现了O(n ^ 2)的时间复杂度。 我希望能够在O(n)中完成。

例如 给定数组[-2,1,-3,4,-1,2,1,-5,4] 连续的子阵列[4,-1,2,1]具有最大的和= 6。

def maximum_sub_array(arr, n):
    ans = - sys.maxint - 1
    for start_index in range(0, n):
        _sum = 0
        for sub_array_size in range(1,n+1):
            if (start_index + sub_array_size > n): # Subarray exceeds array bounds
                break

            _sum += arr[start_index + sub_array_size -1] # Last element of the new Subarray
            ans = max(ans, _sum)

    return ans

1 个答案:

答案 0 :(得分:6)

熟悉Kadane的算法。 实现时间复杂度是O(n)。

def Maximum_Sub_Array(arr, n):
    ans = 0
    _sum = 0
    num_of_neg_values = 0
    for i in range(n):
        if arr[i] < 0:
            num_of_neg_values += 1
        if (_sum + arr[i] > 0):
            _sum += arr[i]
        else:
            _sum = 0
        ans = max(_sum, ans)
        if num_of_neg_values == n:
            return max(arr)
    return ans