使用 kadane 算法到 return 子数组以及子数组的最大和
To return subarray as well alongside maximum sum of subarray using kadane's algorithm
我的这段代码 returns 使用 kadane 算法的子数组的最大和。
我可以对这段代码做哪些更改,以 return 对应于最大总和的子数组?
def maxSubArray(a,size):
curr_max=a[0]
max_so_far=a[0]
for i in a[1:]:
curr_max=max(a[i],curr_max+a[i])
max_so_far=max(max_so_far,curr_max)
return max_so_far
a = [-2, -3, 4, -8, -2, 1, 5, -3]
maxSubArraySum(a,len(a))
这是一个计算最大和和相应的连续子数组的解决方案。它使用带有 i 的单个 for 循环。然后 j 落后于 i 并且有条件地前进。 j 和 i 帮助设置到目前为止提供最大和的子数组的开始和结束索引。最后,开始和结束索引用于对数组和 return 子数组进行切片。
def maxSubArraySum(a):
max_so_far = 0
current_max = 0
start_index = 0
end_index = 0
j = 0 #trails i in the following loop. i and j help set start and end indexes
for i in range(len(a)):
current_max += a[i]
if current_max > max_so_far:
max_so_far = current_max
start_index = j
end_index = i
# reset current max if negative and advance j
if current_max < 0:
current_max = 0
j = i + 1
result_array = a[start_index: end_index+1]
print(f"Max sum is {max_so_far} for contiguous subarray: {result_array}")
maxSubArraySum([-2, -3, 4, -8, -2, 1, 5, -3])
#Output: Max sum is 6 for contiguous subarray: [1, 5]
我的这段代码 returns 使用 kadane 算法的子数组的最大和。 我可以对这段代码做哪些更改,以 return 对应于最大总和的子数组?
def maxSubArray(a,size):
curr_max=a[0]
max_so_far=a[0]
for i in a[1:]:
curr_max=max(a[i],curr_max+a[i])
max_so_far=max(max_so_far,curr_max)
return max_so_far
a = [-2, -3, 4, -8, -2, 1, 5, -3]
maxSubArraySum(a,len(a))
这是一个计算最大和和相应的连续子数组的解决方案。它使用带有 i 的单个 for 循环。然后 j 落后于 i 并且有条件地前进。 j 和 i 帮助设置到目前为止提供最大和的子数组的开始和结束索引。最后,开始和结束索引用于对数组和 return 子数组进行切片。
def maxSubArraySum(a):
max_so_far = 0
current_max = 0
start_index = 0
end_index = 0
j = 0 #trails i in the following loop. i and j help set start and end indexes
for i in range(len(a)):
current_max += a[i]
if current_max > max_so_far:
max_so_far = current_max
start_index = j
end_index = i
# reset current max if negative and advance j
if current_max < 0:
current_max = 0
j = i + 1
result_array = a[start_index: end_index+1]
print(f"Max sum is {max_so_far} for contiguous subarray: {result_array}")
maxSubArraySum([-2, -3, 4, -8, -2, 1, 5, -3])
#Output: Max sum is 6 for contiguous subarray: [1, 5]