📅  最后修改于: 2023-12-03 15:12:46.268000             🧑  作者: Mango
本题目需要你实现一个 Python 函数 find_max_subarray(nums: List[int]) -> int
,给定一个整数数组 nums
,你需要返回其中和最大的连续子数组的和。例如,给定一个数组 [-2, 1, -3, 4, -1, 2, 1, -5, 4]
,其最大子数组为 [4, -1, 2, 1]
,因此你需要返回的结果为 6
。
本题可以使用 Kadane 算法解决,时间复杂度为 $O(n)$。算法基本思路如下:
sum_so_far
和 max_so_far
,分别表示当前元素为止的最大子数组和和全局最大子数组和。sum_so_far
和 max_so_far
:sum_so_far = max(sum_so_far + num, num)
max_so_far = max(max_so_far, sum_so_far)
max_so_far
即为所求的结果。Python 代码实现如下:
from typing import List
def find_max_subarray(nums: List[int]) -> int:
sum_so_far = max_so_far = nums[0]
for num in nums[1:]:
sum_so_far = max(num, sum_so_far + num)
max_so_far = max(max_so_far, sum_so_far)
return max_so_far
Kadane 算法可以高效解决最大子数组问题,值得我们掌握。在使用时需要注意变量的定义和更新方式。