環形數組的最大子數組求解
阿新 • • 發佈:2018-11-03
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 }
運行結果截圖:
合作圖:
環形數組的最大子數組求解