leetcode 53 Maximum Subarray 详细解答

leetcode 53 Maximum Subarray 详细解答

leetcode 53 Maximum Subarray 详细解答
解法1
动态规划:
举例说明:[2,2,1,4,1,2,1,5,4][-2, 2, -1, 4, -1, 2, 1, -5, 4]

(1)[2]2(2)[2,2]2(3)[2,2,1]2+(1)=1(2)(4)[2,2,1,4]2+(1)+4=5(5)...(1):第一个组合[-2]到以第一个数字结尾的最大连续子数组,则最大值-2\\ (2):第二个组合[-2, 2]到以第二个数字结尾的最大连续子数组, 当前最大值2\\ (3):第三个组合[-2, 2, -1]到以第三个数字结尾的最大连续子数组,当前最大值2+(-1)=1(注意,不是2,因为必须要把第三个数字包含在最大子数组中)\\ (4):第四个组合[-2, 2, -1, 4]到以第四个数字结尾的最大连续子数组,当前最大值是2+(-1)+4=5\\ (5):依次类推...

通过上面的观察,得到:

f(i),f(i)0,...,i思路是设定一个f(i), 这里f(i)表示的就是从下标 0,...,i的最大子序列和。\\ 那么这里的状态转移方程就是:f(i)=max(f(i1)+nums[i],nums[i]) f(i) = max(f(i-1)+nums[i], nums[i])
最后从每个f(i)f(i)选出最大的值,即为要求的结果

代码如下:
leetcode 53 Maximum Subarray 详细解答
由于f(i)f(i)只依赖于f(i1)f(i-1),所以这里将代码优化为:
leetcode 53 Maximum Subarray 详细解答
时间复杂度:O(N), 空间复杂度:O(1)