一、题目描述
给你一个整数数组 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 <= 105
-104 <= nums[i] <= 104
二、代码
代码如下:
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
#temp用于记录当前多个数值之和
result = nums[0]
temp = nums[0]
for i in range(len(nums)-1):
#如果 temp和当前的数值之和 >= 当前的数值(即当前的temp总和大于等于0) ,则更新temp值为当前数值总和
#这里去i+1作为下标是因为temp值最开始为nums[0],我们只需要从nums[1]开始往后遍历即可
if temp + nums[i+1] >= nums[i+1]:
temp = temp + nums[i+1]
#否则,说明temp的总和值为负数,让temp等于一个比自身大的下一个数值(即nums[i+1])
else:
temp = nums[i+1]
#将result替换为最优的值
if temp > result:
result = temp
print(result)
return result
三、解题思路
本题思路是遍历nums中所有元素,用temp去记录当前遍历的数值之和,并且在每次遍历新的元素时,temp值都会取最优的结果作为判断下一个元素的基础,temp值始终取尽可能大,在每次遍历新元素之后,temp都会与result进行判断,如果出现更优的值,则更新result。