📅  最后修改于: 2023-12-03 15:42:12.833000             🧑  作者: Mango
本题是 GATE 计算机科学 2021 年的一道考试题,旨在考查考生对编程的理解和运用能力。本题是一道编程填空题,要求考生填写代码,以正确输出指定结果。以下是本题的详细介绍。
给定一个整数数组 arr
,包含 n
个元素。请编写一个函数 getMaxSum(arr, n)
,返回 arr
中任意连续子序列的最大和。
1 ≤ n ≤ 10^6
-10^9 ≤ arr[i] ≤ 10^9
输入
arr[] = {-2, -5, 6, -2, -3, 1, 5, -6}
n = 8
输出
7
这是一道经典的动态规划问题。用 dp[i]
表示以第 i
个元素结尾的最大连续子序列的和,然后可以用递推公式求出每个 dp[i]
的值,最终返回 dp
数组中的最大值即可。
具体的,递推公式如下:
dp[0] = arr[0]
dp[i] = max(dp[i-1] + arr[i], arr[i]) 对于 i > 0
解释一下:如果当前元素 arr[i]
比 dp[i-1] + arr[i]
更大,那么当前最大连续子序列的和就是 arr[i]
;否则,当前最大连续子序列的和就是前一个以 arr[i-1]
结尾的最大连续子序列的和加上当前元素 arr[i]
。
具体实现时,我们可以用一个变量 max_sum
记录 dp
数组中的最大值。最后返回 max_sum
即可。
下面是 Python 3 的代码实现。代码片段如下:
def getMaxSum(arr, n):
dp = [0] * n
dp[0] = arr[0]
max_sum = arr[0]
for i in range(1, n):
dp[i] = max(dp[i-1] + arr[i], arr[i])
max_sum = max(max_sum, dp[i])
return max_sum
注意,本题需要的是连续子序列的最大和,而不是最大连续子序列本身。如果需要输出具体的最大连续子序列,可以稍微修改一下代码。