一整數數組,元素有正有負,要求編寫算法求出最大字段和並返回最長這個字段和的元素;
問題老生長談了,運用動態規劃算法,對於如何保存字段和的元素,我們可以記住最大字段和的開始位置以及字段和的結束位置,讓後複製給一個新數組即刻,算法如下:
public class MaxSum {
public static int[] sum(int arr[]){
int temp =0; //暫時字段和
int max=0; //最大字段和
int begin=0; //最大字段和開始位置
int end=0; //最大字段和結束位置
for(int i=0;i<arr.length;i++){
temp+=arr[i];
if(temp<0){
temp=0;
begin=i+1;
}
if(temp>max){
end=i;
max=temp;
}
}
int array[]=new int[end-begin+1]; //保存最大字段和的數組
for(int i=0;i<=array.length-1;i++){
array[i]=arr[begin+i]; //複製
}
return array;
}
public static void main(String args[]){
int a[]={-3,3,1,-2,3,-4,5,7,-8,6,9,-10};
int arr[]=sum(a);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}