KK's blog

每天积累多一些

0%

LeetCode 053 Maximum Subarray

LeetCode

<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])

注意事项:

  1. 引入全局最大的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)

Free mock interview