题目
给定一个非空整数列表 nums ,找到一个具有最大和的连续子列表(子列表最少包含一个元素),返回其最大和。
例如:
给定一个列表:[-2, 1, -3, 4, -1, 2, 1, -5, 4],返回结果:6
给定一个列表:[-1],返回结果:-1
实现思路1
- 直接暴力破解,但是需进行2层遍历
- 第一层遍历设置当前子列表的起始位置 i,第二层遍历设置当前连续子列表的结束位置 j
- 每次遍历时寻找出遍历到当前位置的最大子序和 res
代码实现
def maxSubArray(nums):
res = nums[0]
for i in range(len(nums)):
sum = 0
for j in range(i, len(nums)):
sum += nums[j]
res = sum if res < sum else res
return res
实现思路2
- 只进行一层遍历,需设置 res 表示遍历到当前位置的最大子序和,sum表示当前连续子列表的元素之和
- 遍历时候,如果sum小于0,那么针对后面计算 sum + i < 0 + i,所以就可以把前面元素都丢掉,即sum=0,然后从下一元素开始重新计算sum
代码实现
def maxSubArray(nums):
res, sum = nums[0], 0
for i in nums:
sum += i
res = sum if res < sum else res
sum = 0 if sum < 0 else sum
return res
更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)
网友评论