leetcode-53 Maximum Subarray

来源:互联网 发布:windows loader v3.27 编辑:程序博客网 时间:2024/05/01 23:57

动态规划(DP)--最大连续子序列和,此题也可以用分治法求解

关于动态规划算法,可以查看前几篇文章

例: A=[-2 ,5 ,3 ,-6 ,4 ,-8 ,6]中的最大子数组之和为8(其中5+3=8)。.
请用动态规划方法解决,时间复杂度为O(n)

算法思想:

设b[j]表示第j处,以a[j]结尾的子序列的最大和。

注意:b[j]并不是前j-1个数中最大的连续子序列之和,而只是包含a[j]的最大连续子序列的和。我们求出b[j]中的最大值,即为所求的最大连续子序列的和。

递推公式:b[j]=max{a[j],b[j-1]+a[j]}

To devise a dynamic programming formula, let us assume that we are calculating the maximum sum of subarray thatends at a specific index(来自cleancode handbook leetcode,官方的那个pdf)

我的代码

int maxSubArray(int A[], int n) {    int max = A[0];    int sum = A[0];    int i;    for(i = 1; i < n; i++){        sum += A[i];        sum = sum > A[i] ? sum : A[i];        if(sum > max)            max = sum;    }    return max;}

参考:http://blog.sina.com.cn/s/blog_55829c8b0101f8e5.html
0 0
原创粉丝点击