o(n)算法求大連續字段和,並返回最大子段和中的元素

一整數數組,元素有正有負,要求編寫算法求出最大字段和並返回最長這個字段和的元素;

問題老生長談了,運用動態規劃算法,對於如何保存字段和的元素,我們可以記住最大字段和的開始位置以及字段和的結束位置,讓後複製給一個新數組即刻,算法如下:

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]);
       }
   }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章