下面的代码实现了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
答案 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