Acwing AcWing 799. 最长连续不重复子序列
题目描述
给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入格式
第一行包含整数 n。
第二行包含 n个整数(均在 0∼105 范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。
数据范围
1≤n≤105
思路
就是在串的第 i 个的时候遍历前面 k 到 i-1 上是否重复 k代表的是前面k-1个字符刚好有第k个字符的。
arr 存的是数字,f 代表的是 前面的字符串的哈希表,代表前面字符数目多少。
代码
#include<iostream>
using namespace std;
const int N = 100010;
int arr[N];
int f[N] = {0};
int main()
{
int n;
cin>>n;
for(int i = 0 ; i < n ; ++ i )
scanf("%d",&arr[i]);
int ans = 0;
for(int i = 0 , j = 0 ; i < n ; i ++ )
{
f[ arr[i] ] ++ ;
while(j < i && f[ arr[i] ] > 1) f[arr[j++]] -- ;
ans = max (ans, i - j +1);
}
cout<<ans<<endl;
return 0;
}
cout<<ans<<endl;
return 0;
}