第三日

3. 最大子序列和问题

问题描述
给定一个整数序列,找出连续的子序列,使得该子序列的和最大,并返回这个最大和。

示例
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

原本想法

  1. 开始考虑用动态规划,用备忘录方法,但是后来发现做不下去
  2. 后面考虑用双指针,但是又没有头绪

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)

posted @ 2024-06-07 23:13  写代码的蓝胖子  阅读(27)  评论(0)    收藏  举报