题目:给定由n个整数组成的序列a1,a2,a3.....an,求该序列某一字段的最大和,并返回序列的开始和结束位置。
使用动态规划的思想,以下实现方式的时间复杂度为O(n^2)
public class MaxSum {
public argsOfMaxSum theMaxSum(int arr[],int length){
int sum=0,begin=0,end=0;
for(int i=0;i<length;i++){
int thissum=0;
for(int j=i;j<length;j++){
thissum+=arr[j];
if(thissum>sum){
sum=thissum;
begin=i;
end=j;
}
}
}
return new argsOfMaxSum(sum, begin, end);
}
public static void main(String[] args) {
int[] a={-2,11,-4,13,-5,-2};
argsOfMaxSum maxsum=new MaxSum().theMaxSum(a,a.length);
System.out.println("最大字段和:"+maxsum.theMaxSum+"\n"+"从"+maxsum.numBegin+"到"+maxsum.nunEnd);
}
public class argsOfMaxSum{
public argsOfMaxSum(int theMaxSum, int numBegin, int nunEnd) {
super();
this.theMaxSum = theMaxSum;
this.numBegin = numBegin;
this.nunEnd = nunEnd;
}
public int theMaxSum;
public int numBegin;
public int nunEnd;
}
}