# 递推公式
# f(k): 以 K 为结尾的子串的和的最大值
# f(k+1) = max(nums[k], f(k-1) + nums[k])
nums = [1, 1,-2,3, -1, 78,-3]# nums 是输入的整形数组
def find_max_sum_subnums(nums):
# cur_sum 以该位置为结尾的子串的和的最大值
# max_sum 目前为止连续整数最大和
cur_sum , max_sum = float('-inf'), float('-inf')
max_start = 0
max_end = 0
for i, num in enumerate(nums):
if cur_sum > 0: # > 0 则输出最短字串, >= 0 则输出最长子串
cur_sum = cur_sum + num
else:
cur_sum = num
max_start = i # max_here = 0 时也更新子串起点
if cur_sum > max_sum:
max_end = i
max_sum = max(max_sum, cur_sum)
return max_sum, nums[max_start:max_end+1]
print(find_max_sum_subnums(nums))
[Online Judge]返回最大连续子串整数之和以及对应的子串
于 2022-06-01 22:27:12 首次发布
本文介绍如何使用递推公式解决给定数组 nums 中以特定位置结尾的子串和的最大值问题。通过 `find_max_sum_subnums` 函数,计算并返回具有最大和的子串。核心代码展示了动态规划思想的应用。

1136

被折叠的 条评论
为什么被折叠?



