53. Maximum Subarray
题目
给定一个整数数组 nums
,找到一个连续子数组(包含至少一个数字),该子数组具有最大的和,并返回其和。
示例:
输入:[-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:[4,-1,2,1] 的和最大,为 6。
后续问题:
如果你已经找到了 O(n) 的解决方案,尝试编写另一种使用分治法的解决方案,这种方法更为微妙。
解题思路
- 这一题可以用 DP 求解也可以不用 DP。
- 题目要求输出数组中某个区间内数字之和最大的那个值。
dp[i]
表示[0,i]
区间内各个子区间和的最大值,状态转移方程是dp[i] = nums[i] + dp[i-1] (dp[i-1] > 0)
,dp[i] = nums[i] (dp[i-1] ≤ 0)
。