LeetCode: 53. 最大子序和
说实话 , 看完题面完全想不到 dp, 我又想到 前缀和 去了。。。
入门级 dp
状态定义: d p [ i ] dp[i] dp[i] 为第 i 之前能取到的连续子区间的最大和。
转移方程: d p [ i ] = m a x ( d p [ i − 1 ] + n u m s [ i ] , n u m s [ i ] ) dp[i] = max(dp[i - 1] + nums[i], nums[i]) dp[i]=max(dp[i−1]+nums[i],nums[i])
初始化: d p [ 0 ] = n u m s [ 0 ] dp[0] = nums[0] dp[0]=nums[0]
返回结果,过程中记录最大值.
之前写过, 这道题有点印象
博客指路: 剑指 Offer 42. 连续子数组的最大和
AC Code
import static java.lang.Math.*;
class Solution {
public int maxSubArray(int[] nums) {
int len = nums.length;
int[] dp = new int[len];
dp[0] = nums[0];
int mx = dp[0];
for (int i = 1; i < len; i++) {
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
mx = max(dp[i], mx);
}
// System.out.println(Arrays.toString(dp));
return mx;
}
}