给定一个整数序列找出一个具有最大和的连续子数组。比如:输入:-2 1 -3 4 -1 2 1 -5 4输出:6用python实现
可以使用动态规划的思想来解决这个问题。假设当前位置为i,那么以i结尾的子数组的最大和可以分为两种情况:
- 以i-1结尾的子数组的最大和加上nums[i],即dp[i-1]+nums[i]
- 只包含nums[i],即nums[i]
那么以i结尾的子数组的最大和就是这两种情况中的最大值。因此,可以用一个数组dp来记录以每个位置为结尾的子数组的最大和,最终返回dp中的最大值即可。
代码如下:
def maxSubArray(nums):
dp = [0] * len(nums)
dp[0] = nums[0]
max_sum = dp[0]
for i in range(1, len(nums)):
dp[i] = max(dp[i-1] + nums[i], nums[i])
max_sum = max(max_sum, dp[i])
return max_sum
测试代码:
nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(maxSubArray(nums)) # 输出6
``
原文地址: https://www.cveoy.top/t/topic/dyqh 著作权归作者所有。请勿转载和采集!