題目
給定一個非空整數列表 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