方法一, 套模板
#include <bits/stdc++.h>
using namespace std;
int n, a[100010], mp[100010];
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int l, r, i, j, k, ans = 0;
cin >> n;
for(i = 0; i < n; i++) cin >> a[i];
for(l = 0, r = 0; r < n; r++) {
mp[a[r]]++;
while(mp[a[r]] > 1) mp[a[l++]]--;
ans = max(ans, r - l + 1);
}
cout << ans << "\n";
}
方法二,保留上次留下的位置更新
#include <bits/stdc++.h>
using namespace std;
int n, a[100010], last[100010];
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int l, r, i, j, k, ans = 0;
cin >> n;
memset(last, -1, sizeof last);
for(i = 0; i < n; i++) cin >> a[i];
for(l = 0, r = 0; r < n; r++) {
l = max(l, last[a[r]] + 1);
ans = max(ans, r - l + 1);
last[a[r]] = r;
}
cout << ans << "\n";
}