很多动态规划算法非常像数学中的递推。我们如果能找到一个合适的递推公式,就能很容易的解决问题。
我们用dp[n]表示以第n个数结尾的最大连续子序列的和,这里第n个数必须在子序列中。于是存在以下递推公式:
dp[n] = max(0, dp[n-1]) + num[n]
仔细思考后不难发现这个递推公式是正确的,则整个问题的答案是max(dp[m]) | m∈[1, N]
。java语言代码如下:
//dp[i] = max{dp[i-1]+num[i],num[i]}
class Solution {
public static int maxSubArray(int[] nums) {
if(nums.length==1){
return nums[0];
}
int res = nums[0];
for(int i = 1;i<nums.length;i++){
nums[i] = Math.max(nums[i-1]+nums[i], nums[i]);
if(res<nums[i]){
res = nums[i];
}
}
return res;
}
public static void main(String[] args){
int[] test = {-2,-1};
int res = maxSubArray(test);
System.out.println(res);
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章