输入一个包含N 个正整数的数组,求出这个数组中包含的最长的回文数组是什么, 如果有相同长度的最长回文数,输出最靠前的一个。
输入格式 第一行1 个正整数:N,N的范围在[1,1000]。
第二行 N 个不同的正整数:范围在[1,10000]。
输出格式 多个正整数, 表示数组中最长的回文数组。
输入/输出例子1 输入:
9
2 6 1 9 7 9 1 5 3
输出:
1 9 7 9 1
#include<bits/stdc++.h>
using namespace std;
int a[1234567];
int main(){
int b[5],bb[5];
int n,max=0,maxid;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=2;i<n;i++)
{
if(a[i]==a[i-1])
{
b[1]=2;
for(int j=i-2,k=i+1;a[j]==a[k];j--,k++)
{
b[1]+=2;
bb[1]=j;
}
}
if(a[i]==a[i+1])
{
b[2]=2;
for(int j=i-1,k=i+2;a[j]==a[k];j--,k++)
{
b[2]+=2;
bb[2]=j;
}
}
if(a[i-1]==a[i+1])
{
b[3]=3;
for(int j=i-2,k=i+2;a[j]==a[k];j--,k++)
{
b[3]+=2;
bb[3]=j;
}
}
for(int j=1;j<3;j++)
{
if(b[j]>=b[j+1])
{
swap(b[j],b[j+1]);
swap(bb[j],bb[j+1]);
}
}
if(b[3]>max)
{
max=b[3];
maxid=bb[3];
}
}
if(b[3]==0) {cout<<a[1];}
else {
for(int i=maxid;i<max+maxid;i++)
cout<<a[i]<<" ";
}
return 0;
}