在计算机考研中,以下是一道典型的题目:
题目:请设计一个高效的算法,实现一个函数`findMaxSubarraySum(arr)`,该函数接收一个整数数组`arr`作为输入,返回数组中连续子数组的最大和。要求算法的时间复杂度为O(n)。
示例:
输入:`arr = [-2, 1, -3, 4, -1, 2, 1, -5, 4]`
输出:`6`(连续子数组`[4, -1, 2, 1]`的最大和)
解答思路:
1. 使用动态规划的思想,维护一个变量`maxSum`来存储当前连续子数组的最大和,初始化为0。
2. 遍历数组,对于每个元素`num`,计算`maxSum = max(num, maxSum + num)`,这样可以保证`maxSum`始终是当前以`num`结尾的连续子数组的最大和。
3. 同时,维护一个变量`globalMaxSum`来存储遍历过程中遇到的最大连续子数组的和。
4. 返回`globalMaxSum`作为最终结果。
代码实现:
```python
def findMaxSubarraySum(arr):
maxSum = 0
globalMaxSum = float('-inf')
for num in arr:
maxSum = max(num, maxSum + num)
globalMaxSum = max(globalMaxSum, maxSum)
return globalMaxSum
测试
arr = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(findMaxSubarraySum(arr)) 输出:6
```
微信小程序:【考研刷题通】
想要在考研路上更上一层楼?【考研刷题通】小程序助你一臂之力!涵盖政治、英语、数学等全部考研科目,海量真题、模拟题等你刷!轻松备考,高效提升,快来加入我们吧!📚🎓🎯【考研刷题通】,你的考研备考好帮手!