双指针算法可以用来优化时间。
可以先写一个用暴力的朴素算法
看一下i 和 j 有没有什么单调关系
有单调关系就可以利用这种单调关系
来优化时间
模板
for(int i = 0, j = 0; i < n; i ++)
{
while(j < i && check(i, j )) j ++;
res = max(res, i - j + 1);
}
// 例题代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, ans = -1;
int s[N], vis[N];
int main()
{
scanf("%d", &n);
int res, l = 1, r = 1;
for(; r <= n; r ++)
{
scanf("%d", &s[r]);
vis[s[r]] ++;
while(vis[s[r]] > 1)
{
vis[s[l]] --;
l ++;
}
ans = max(ans, r - l + 1);
}
printf("%d", ans);
return 0;}