复杂度我也不知道怎么证明,但是n3肯定是不行的,优化的方法就是建一个数组,如果一个数字存在就记录他的数量,不然就是0,寻找最大等差数列的时候n2确定首位的两个数,剩下的根据头两个数的间距去查找,应该会比n3好一点。
#include <iostream>
#include <math.h>
#include <iomanip>
#include <string>
#include <cstdio>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#define INF 0x3f3f3f3f
#define N 5010
#define ll long long
using namespace std;
int n;
int arr[N];
int vis[2000010];
int main() {
int i, j, x, y, w;
int ans = 0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
vis[arr[i]]++;
ans = max(vis[arr[i]],ans);
}
sort(arr,arr+n);
n = unique(arr,arr+n) - arr;
for(i = 0;i<n;i++){
for(j = i+1;j<n;j++){
int d = arr[j] - arr[i];
int cnt = 2;
int tmp = arr[j];
while (vis[tmp + d])
{
tmp += d;
cnt++;
}
ans = max(ans,cnt);
}
}
printf("%d\n",ans);
return 0;
}