第三日
3. 最大子序列和问题
问题描述
给定一个整数序列,找出连续的子序列,使得该子序列的和最大,并返回这个最大和。
示例
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
原本想法
- 开始考虑用动态规划,用备忘录方法,但是后来发现做不下去
- 后面考虑用双指针,但是又没有头绪
GPT代码
def max_subarray_sum(nums):
if not nums:
return 0
current_sum = max_sum = nums[0]
for num in nums[1:]:
current_sum = max(num, current_sum + num)
max_sum = max(max_sum, current_sum)
return max_sum
# 示例测试
nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(max_subarray_sum(nums)) # 输出: 6
我的理解
我理解为是一种求当前连续数字的最大和的贪心算法,序列不断吞并下一个数字。
吞并有两种情况,一个是加上之前的结果,另一个是不加上,区别在于之前的结果是否大于0。
current_sum = max(num, current_sum + num)
所以我觉得这里也可以改写如下:
if current_sum > 0:
current_sum += num
else:
current_sum = num
最终要求的是整个计算过程中的最大序列,所以用max_sum记录下最大结果
max_sum = max(max_sum, current_sum)

浙公网安备 33010602011771号