如何解决使用 kadane 算法返回子数组以及子数组的最大和
我的这段代码使用 kadane 算法返回子数组的最大和。 我可以对此代码做哪些更改以返回与最大和相对应的子数组?
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 帮助设置提供最大总和的子数组的开始和结束索引。最后,开始和结束索引用于对数组进行切片并返回子数组。
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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。