内容:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
思路:
动态规划
另sum[i]表示从i开始的最大子串和,则有递推公式:sum[i] = max{A[i], A[i] + sum[i+1]}
因为递推式只用到了后一项,所以在编码实现的时候可以进行状态压缩,用一个变量即可
int maxSubArray(int A[], int n) {
int sum = A[n - 1];
int maxSum = sum;
for (int i = n - 2; i >= 0; i--) {
sum = max(A[i], sum + A[i]);
maxSum = max(maxSum, sum);
}
return maxSum;
}
本文介绍了一种寻找具有最大和的连续子数组的算法。通过动态规划方法,使用状态压缩技巧,仅需一个变量即可高效求解。示例中给出了具体实现代码。
727

被折叠的 条评论
为什么被折叠?



