题目描述
解题思路
遍历每一个点,寻找以这个点为首的超现实字串的末尾在什么地方,再把这个字串的长度插入到vector等容器或数组中,然后遍历它找出最大值即可
AC代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 1e6 + 10;
int n;
int a[N];
vector<int> p;
void sd(int u)
{
int k = 1;
for (int i = u + 1; i <= n; i ++ )
{
if (a[i] == a[u] + k)
{
if (k > 0)
k = -k;
else
k = -k + 1;
}
else{
p.push_back(i - u);
break;
}
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
for (int i = 1; i <= n; i ++ )
{
sd(i);
}
int ans = 0;
for (int i = 0; i < p.size(); i ++ )
{
ans = max(ans, p[i]);
}
cout << ans << endl;
return 0;
}
时间复杂度:O(n^2)
佬们有什么更好的方法欢迎分享^^