参加《编程之美》第二章2.14
暴力解法1:o(n^3)
int maxSum(int [] A , int n){
int max = 0;
for(int i = 0 ; i < n ; i++){
for(int j = i + 1; j < n ; j ++){
int sum = 0;
for(int k = i ; k <=j ; k ++){
sum += A[k];
if(sum > max) max = sum;
}
}
}
return max;
}
暴力解法2:o(n^2)
int maxSum(int [] A , int n){
int max = 0;
for(int i = 0 ; i < n ; i++){
int sum = A[i];
for(int j = i + 1; j < n ; j ++){
sum += A[j];
if(sum > max) max = sum;
}
}
return max;
}
分治/递归解法
int maxSum(int start , int end ,int [] A){
int mid = (left+right)/2;
int left = maxSum(start , mid);
int right = maxSum(mid+1,end);
int middle = crossMid(start,mid,end);
return max(left,right,middle);
}
动态规划
int maxSum( int [] A , int n){
nStart = A[n-1];
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;
}
详解稍后附上