subMaxSum
来源:互联网 发布:手机淘宝店铺管理在哪 编辑:程序博客网 时间:2024/06/05 19:31
采用分治法,复杂度为 O(nlgn)
int max (int a, int b) {return (a > b)? a: b;}int max3(int a, int b, int c) {return max(c, max(a, b));}int subMax(int A[], int l, int u){ int i, sum, lmax, rmax, m = (l + u) / 2; if (l > u) return 0; if (l == u) return max(0, A[0]); // Find leftSubMax to left lmax = sum = 0; for (i = m; i >= 0; --i) { sum += A[i]; lmax = max(lmax, sum); } // Find rightSubMax to right rmax = sum = 0; for (i = m + 1; i < u; ++i) { sum += A[i]; rmax = max(rmax, sum); } return max3(lmax + rmax, subMax(A, l, m), subMax(A, m + 1, u));}
采用扫描算法,复杂度为 O(n)
int subMax(int A[], int n){ int i, maxsofar = 0, maxendhere = 0; for (i = 0; i < n; ++i) { maxendhere = max(maxendhere + A[i], 0); maxsofar = max(maxendhere, maxsofar); } return maxsofar;}