最长回文数

问题描述


输入一个包含N个正整数的数组,求出这个数组中包含的最长的回文数组是什么, 如果有相同长度的最长回文数,输出最靠前的一个。

解题思路


伪码:

INPUT A[]
FOR I IN 1,N{
FOR J IN I,N{
IF HUIWEN(A,I,J) && J-I+1>MAXLEN{
X,Y,MAXLEN = I,J,J-I+1
}
}
}
OUTPUT A[X TO Y]

上代码

int n;
cin >> n;
int a[n + 1];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int x, y, max = -1;
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
if (f(a, i, j) && (j - i + 1) > max) {
x = i;
y = j;
max = j - i + 1;
}
}
}
for (int i = x; i <= y; i++) {
cout << a[i] << " ";
}

f()的定义

bool f(int a[], int i, int j) {
for (; i < j; i++, j--) {
if (a[i] != a[j]) {
return false;
}
}
return true;
}

upd(2023/12/24)

main函数的第10行的两个条件可以交换,因为C++中的 && 有短路,可以优化 运行效率

posted on   可爱楷玩算法  阅读(82)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示