1. 程式人生 > >環形數組的最大子數組求解

環形數組的最大子數組求解

esp n) col style names out pac width div

然後再用一維數組求解最大子數組的方法即可。值得註意的是,子數組的長度不可超過n,在我程序中有所體現。最終,因為沒有要求時間復雜度的問題,我選擇

了遍歷的方法求解了此問題。

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n;
 6     cout<<"輸入環形數組的長度:";
 7     cin>>n;
 8     int *p;
 9     p=new int[n];
10     for(int i=0;i<n;i++)
11     {
12 cin>>p[i]; 13 } 14 int *q; 15 q=new int[2*n-1]; 16 for(int i=0;i<2*n-1;i++) 17 { 18 if(i<n) 19 { 20 q[i]=p[i]; 21 } 22 if(i>=n) 23 { 24 q[i]=p[i-n]; 25 } 26 //cout<<q[i];
27 } 28 int *a=new int[n*n]; 29 //對數組a[]進行初始化; 30 for(int i=0;i<n*n;i++) 31 { 32 a[i]=0; 33 } 34 int t=0; 35 //利用枚舉法,將子數組列舉出; 36 for(int i=0;i<n;i++) 37 { 38 for(int j=i;j<n+i;j++)//因為環形子數組最大長度最多為n;而n+i-i即為n; 39 { 40 for(int z=i;z<=j;z++)
41 { 42 a[t]=a[t]+q[z]; 43 } 44 t++; 45 } 46 } 47 //求出最大子數組; 48 for (int i = 0; i <n*n; i++) 49 { 50 if (a[0] < a[i]) 51 { 52 a[0] = a[i]; 53 } 54 } 55 cout<< "最大子數組的和為:"<<a[0] << endl; 56 57 system("pause"); 58 return 0; 59 }

運行結果截圖:

技術分享圖片

技術分享圖片

合作圖:

技術分享圖片

環形數組的最大子數組求解