程式設計之美8:求陣列的子陣列之和的最大值
阿新 • • 發佈:2018-11-27
1: int MaxSum(int *A, int n) { int maximum = -INF; int sum; for (int i = 0; i < n; i++) { sum = 0; for (int j = i; j < n; j++) { sum += A[j]; if (sum > maximum) { maximum = sum; } } } return maximum; } 2:max{A[0],A[0]+Start[1],All[1]},其中All[1]為(A[1],…,A[n-1])中最大一段陣列之和。 int max(int x, int y) { return (x > y) ? x : y; } int MaxSum(int *A, int n) { int nStart = A[n - 1]; int nAll = A[n - 1]; for (int i = n - 2; i >= 0; i--) { nStart = max(A[i], nStart + A[i]); nAll = max(nStart, nAll); } return nAll; } 換一個寫法: int MaxSum(int *A, int n) { int nStart = A[n - 1]; int nAll = A[n - 1]; for (int i = n - 2; i >= 0; i--) { if (nStart < 0) { nStart = 0; } nStart += A[i]; if (nStart > nAll) { nAll = nStart; } } return nAll; }