题目:
给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
我的解答:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = []
a.extend(nums)#不能直接a = nums,这样改a会把nums一起改了
for i in range(len(nums)-1):
sums = nums[i]
for j in range(i+1, len(nums)):
if sums <= sums + nums[j]:
sums = sums + nums[j]
else:
break
a.append(sums)
return max(a)
蛮力法果然超时了。。。
看看别人的方法:
累加和sum 如果sum<0 sum抛弃原来的值 sum还原为0 继续加 如果sum>0 继续加 然后返回最大值 。
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
z = 0#排除都是负数的情况
for i in nums:
if i < 0:
z = z + 1
if nums == []:
return 0
elif len(nums) == 1:
return nums[0]
elif z == len(nums):
return max(nums)
else:
sums = 0
a = []
for i in range(len(nums)):
sums = sums + nums[i]
if sums < 0 :
sums = 0
a.append(sums)
return max(a)
各种方法合集及讲解:
https://blog.youkuaiyun.com/weixin_41958153/article/details/81131379