(https://www.acwing.com/problem/content/801/)
给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长度。
输入格式
第一行包含整数n。
第二行包含n个整数(均在0~100000范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。
数据范围
1≤n≤1000001≤n≤100000
输入样例:
5
1 2 2 3 5
输出样例:
3
思路:用i和j两个指针维护一个区间,j为左端点,i为右端点,S【】记录元素出现的次数。如果出现元素的次数大于1,表明出现重复,且必定为a[i]。此时就要重新维护一个以j=i为左端点的区间。从一到N扫描一遍就能得到结果。
#include <iostream> using namespace std; const int maxn = 1e5+10; int a[maxn]; int s[maxn]; int main() { std::ios::sync_with_stdio(false); int n; cin >> n; for(int i=1;i<=n;i++) { cin >> a[i]; } int res=0; for(int i=1,j=1;i<=n;i++) { s[a[i]]++; while(s[a[i]]>1) { s[a[j]]--; j++; } res=max(res,i-j+1); } cout << res << endl; return 0; }