53. 最大子数组和

思路 1:前缀和
代码
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if len(nums) == 1:
return nums[0]
preSum = [0] * (len(nums) + 1)
for idx, n in enumerate(nums):
preSum[idx + 1] = preSum[idx] + n
res = -float('inf')
for idx, p in enumerate(preSum):
for i in range(idx):
res = max(res, p - preSum[i])
return res
注:前缀和写法简单但时间复杂度高,无法通过所有测试用例。
优化思路
每次只需减去最小的前缀和,维护一个最小前缀和即可。
class Solution:
def maxSubArray(self, nums):
if len(nums) == 1:
nums[]
res = -()
preSum =
minPreSum =
n nums:
preSum += n
res = (res, preSum - minPreSum)
minPreSum = (minPreSum, preSum)
res






