给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:输入:nums = [1]
输出:1
示例 3:输入:nums = [5,4,-1,7,8]
输出:23提示:
1 <= nums.length <= 10510^5105
-10410^4104 <= nums[i] <= 10410^4104
思路看leetcode官方视频讲解:
class Solution:
def maxSubArray(self, nums: list) -> int:
#贪心解法: 如果当前元素之前的和小于0,那么就应该丢弃,否则加上当前元素
maxsum, presum = -10000, -10000
if len(nums) == 1:
return nums[0]
for i in nums:
if presum < 0:
presum = i
else:
presum += i
maxsum = max(maxsum, presum)
return maxsum
def maxSubArray(self, nums: list) -> int:
#动态规划:如果前一个元素大于0,把它加到当前元素上
if len(nums) == 1:
return nums[0]
maxsum = nums[0]
for i in range(1,len(nums)):
nums[i] = max(nums[i], nums[i] + nums[i-1])
maxsum = max(nums[i], maxsum)
return maxsum
贪心解法在这道题上比较容易理解,但也有一个点就是需要设着两个变量:一个记录最大值,一个记录当前的和。想一下,前面一个连续数组的和很大,但是遇到了一个更大的负数,导致和小于等于0,当重新开始计数后,后边的数组和不一定比前面的大,所以需要两个变量
文章讨论了如何在给定整数数组中找到具有最大和的连续子数组。介绍了两种方法:贪心算法通过判断当前元素与之前和的关系,以及动态规划方法,通过累加和更新全局最大值。
1496

被折叠的 条评论
为什么被折叠?



