1. 程式人生 > >環形陣列

環形陣列

要求:

1.輸入一個整形陣列,數組裡有正數也有負數。

2.陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。

3.求所有子陣列的和的最大值。

思路:環形陣列的求和可以把它當成一個一維整數陣列,後面構建一個虛假的數列,加上限制條件。

第一,最大子和的首位位置在1~n中,不能超出n。

第二,最大和的長度不能超過n。

#include <iostream>
#include <cstdio>
using namespace std;
#define N 200010
int a[N],n;
int main()
{
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[n+i]=a[i];
}
int sum=0,head=1,cout=0,ans=0;
int i=1;
while(head<=n&&cout<=n)
{
if(sum<0)
{
sum=a[i];
head=i;
if(head>n) break;
cout=1;
}
else
{
sum+=a[i];
cout++;
if(cout>n)
{
i=head;
cout=0;
sum=-0x3f3f3f;
}
}
ans=max(ans,sum);
i++;
}
printf("%d\n",ans);
}
return 0;
}

總結:這次任務老師給了一定的提示,要注意的就是限制條件,總的來說還是很流暢的。