1. 程式人生 > >環形陣列的最大子陣列求解

環形陣列的最大子陣列求解

 

 

然後再用一維陣列求解最大子陣列的方法即可。值得注意的是,子陣列的長度不可超過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 }

執行結果截圖:

合作圖: