動態規劃之最大子數組問題

輸入一個整數數組,數組中有正數也有負數,找到具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和以及連續子數組的起始位置。
要求:用動態規劃策略實現,並分析其時間複雜度。

在這裏插入圖片描述

public class Continuous {

 public static void main(String[] args) {

 // TODO Auto-generated method stub

  int []a= {1,-2,4,5,-2,8,3,-2,6,3,7,-1};

  int []d = new int [12];

  int []rec = new int [12];

  int p=0,q=0;

  d[11]=-1;

  rec[11]=11;

  for (int i =11-1; i >=0;i--) {

 if(d[i+1]>0) {

 d[i]=d[i+1]+a[i];

 rec[i]=rec[i+1];

 if(d[i]>p) {

 p=d[i];

 q=i;

 }

 }else {

 d[i]=a[i];

 rec[i]=i;

 }

 }

   System.out.println("最後的D數組爲:");

 for (int j = d.length-1; j >=0; j--) {

 System.out.print(" d["+j+"]=="+d[j]);

 }System.out.println();

 System.out.println("最後的Rec數組爲");

 for (int k = rec.length-1; k >=0; k--) {

 System.out.print(" rec["+k+"]=="+rec[k]);

 }System.out.println();

 System.out.println("子數組中最大爲:"+p);

 System.out.println("最大子數組爲第"+(q+1)+"個數到第"+(rec[q]+1)+"個數");

 System.out.print("最大子數組爲:");

 for (int i = q; i <= rec[q]; i++) {

 System.out.print(a[i]+" ");

 }

 }

}

運行截圖:
在這裏插入圖片描述

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