<div>
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
A subarray is a contiguous part of an array.
Example 1:
<pre>Input: nums = [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6. </pre>
Example 2:
<pre>Input: nums = [1] Output: 1 </pre>
Example 3:
<pre>Input: nums = [5,4,-1,7,8] Output: 23 </pre>
Constraints:
1 <= nums.length <= 10<sup>5</sup>-10<sup>4</sup> <= nums[i] <= 10<sup>4</sup>
Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
</div>
题目大意:
最大子数组和
算法思路:
dp[i] = max(dp[i-1] + nums[i], nums[i])
注意事项:
- 引入全局最大的res,因为递归式是以末位为结尾的最大和
Python代码:
1
2
3
4
5
6
7
8
9
10# dp[i] = max(dp[i-1] + nums[i], nums[i])
def maxSubArray(self, nums: List[int]) -> int:
sum, res = -sys.maxsize, -sys.maxsize
for num in nums:
if sum > 0:
sum += num
else:
sum = num
res = max(sum, res)
return res
算法分析:
时间复杂度为O(n),空间复杂度O(1)


