📅  最后修改于: 2023-12-03 15:42:16.506000             🧑  作者: Mango
给定一个长度为n的整数序列,你需要找到一个连续的子序列,使得该子序列的元素和最大。你需要输出这个最大的子序列和。
第一行包含一个整数n,表示数字序列的长度。
第二行包含n个整数,分别表示整数序列中的每个数字。
输出一个整数,表示最大的子序列和。
5
1 2 3 -2 5
9
使用动态规划算法。设max[i]为以第i个数字结尾的最大子序列和,则有以下状态转移方程:
max[i] = max(max[i-1]+nums[i], nums[i])
其中,nums表示输入的整数序列。
def max_subarray(nums):
max_sum = nums[0]
cur_sum = 0
for num in nums:
cur_sum = max(cur_sum + num, num)
max_sum = max(max_sum, cur_sum)
return max_sum
n = int(input())
nums = list(map(int, input().split()))
print(max_subarray(nums))
代码中使用了一次循环,每次操作的时间都是常数级别的,因此时间复杂度为O(n)。