AcWing 799. 最长连续不重复子序列
原题链接
简单
作者:
tq
,
2024-03-14 22:48:15
,
所有人可见
,
阅读 13
//第二遍做错了
//思路是从一边双指针,一旦遇到重复数(判断用的数组存储),把前面的所有数都删去,直到只剩一个当前数(这时i=j),再重新进行双指针
#include <iostream>
using namespace std;
const int N = 100010;
int a[N], s[N], res; //s是存储每个ai的值有多少个的数组
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i ++)
scanf("%d", &a[i]);
for(int i = 0, j = 0; i < n; i ++){ //i在右移,j还在起点
s[a[i]] ++;
while(s[a[i]] > 1){ //遇到重复数了
s[a[j]] --;
j ++;
}
res = max(res, i - j + 1);
}
printf("%d", res);
return 0;
}