環形陣列的最大子陣列求解
阿新 • • 發佈:2018-11-03
然後再用一維陣列求解最大子陣列的方法即可。值得注意的是,子陣列的長度不可超過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(inti=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 }
執行結果截圖:
合作圖: