📅  最后修改于: 2023-12-03 15:07:34.291000             🧑  作者: Mango
本题需要设计一个Python程序,用于给定一串数字列表,返回其中的最大子序列和。具体要求如下:
程序需要接收一个包含整数的列表作为输入,列表长度不超过100000。
程序输出一个整数,表示最大子序列和。
5
5 -1 2 8 -5
14
这是一个经典的动态规划问题。对于以第i个数为结尾的最大子序列和dp[i],有两种情况:
最后取所有dp值中的最大值即为答案。
def max_subarray(nums):
n = len(nums)
dp = [0] * n
dp[0] = nums[0]
for i in range(1, n):
dp[i] = nums[i] if dp[i-1] < 0 else dp[i-1] + nums[i]
return max(dp)
n = int(input())
nums = list(map(int, input().split()))
print(max_subarray(nums))
本题动态规划算法的时间复杂度为O(n),符合题目要求。