题目:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(1,len(nums)):
nums[i] = max(nums[i], nums[i] + nums[i-1])
return max(nums)
解题思路:这里使用的是迭代法
重点解析:
1.range(1,len(nums)):这里需要排除第一个数字,如果从第一个数字开始,那么遇到只有一个数字的数组的时候就会出现自己加自己的情况。所以直接跳过第一个数字从第二个数字开始才是正确的
2.nums[i] = max(nums[i], nums[i] + nums[i-1]):这里首先使用的是max语句,但是这个max语句会对数列本身的值产生变化。这样仅仅会保留相邻的最大值,通过迭代的方法选出最后的值。
3.max(nums):我们最后保留下来的是一串相邻数相加的最大值得合计,从中挑选出最大的才是最终目的。
处理结果:
这是非常好的使用迭代的方法,就是有点不太好理解,而且由于是迭代所以运行速度上也不是很优秀。
来源:力扣(LeetCode)