记录每个数第一次出现的位置
从后往前遍历
遍历到x则删除x第一次出现的位置到x的位置的距离 以此来更新答案``
如果x已被遍历过则break
#include<bits/stdc++.h>
using namespace std;
#define rep(x,n) for (int x = 0; x < n; ++x)
unordered_map<int, int> lft, vis;
const int MAXN = 2e3+5;
int arr[MAXN];
int main() {
int n, ans, eft = 0;
cin >> n;
rep(i, n) {
cin >> arr[i];
if (!lft.count(arr[i])) lft[arr[i]] = i;
else if (!eft) eft = i;
}
ans = eft;
for (int i = 1, lf = eft; i <= n; i++) {
if (vis.count(arr[n-i])) break;
lf = min(lf, lft[arr[n-i]]);
ans = max(ans, i + lf);
vis[arr[n-i]] = true;
}
cout << n - ans << endl;
return 0;
}