环形数组的最大子数组求解

然后再用一维数组求解最大子数组的方法即可。值得注意的是,子数组的长度不可超过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 }

运行结果截图:

合作图:

原文地址:https://www.cnblogs.com/Kirito-math/p/9901675.html