53. Maximum Subarray (1D-dp)

brute force

nested for loop, find each combination, 正數起點正數結尾(優化

time: O(n^2)

DP

經驗:從後面開始看, 固定一個數, 前面子序列會...?

maxsum數字(i), Max( 取前面的數max_sum(i-1) 或不取 (會是0) ) + 自身a[i]

  1. subproblem : maxsum(i) = Max(max_sum(i-1), 0) + A[i]

  2. f[i]

  3. dp 方程:

max_sum = 自身最大 or 自身包含之前的sum的最大

f(i) = Max(A[i] , A[i] + f(i-1)) , 提出 A[i] =>

f(i) = Max(0, f(i-1) ) + A[i] . =>

也就是

dp[i-1] < 0 的狀況 => 不取 = 0

time: O(n)

space: O(n)

DP - just use variable

time :O(n)

space: O(1)

see notes!

can be also wrote like this

Last updated

Was this helpful?