一. 题目
-
题目
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 -
示例
二. 方法一
-
解题思路
- 如果之前的最大子序列小于0, 则当前最大子序列就是当前元素
- 如果之前的最大子序列大于0, 则当前最大子序列等于之前最大子序列 + 当前元素
-
解题代码
def maxSubArray(self, nums: List[int]) -> int: max_size = nums[0] arr = [0 for _ in range(len(nums))] for i in range(len(nums)): # 如果之前的最大子序列小于0, 则当前最大子序列就是当前元素 # 如果之前的最大子序列大于0, 则当前最大子序列等于之前最大子序列 + 当前元素 arr[i] = max(arr[i - 1] + nums[i], nums[i]) max_size = max(max_size, arr[i]) return max_size
-
分析
时间复杂度: O(n)
空间复杂度: O(n)
三. 方法二
-
解题思路
思路和方法一一样, 只是用变量存储之前的结果 -
解题代码
def maxSubArray(self, nums: List[int]) -> int: max_size = nums[0] temp = 0 for i in range(len(nums)): temp = max(temp + nums[i], nums[i]) max_size = max(max_size, temp) return max_size
-
分析
时间复杂度: O(n)
空间复杂度: O(1)