题目描述
给定一个长度为 n n n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入格式
第一行包含整数 n n n。
第二行包含 n n n 个整数(均在 0 ∼ 1 0 5 0 \sim 10^5 0∼105 范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。
数据范围
1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1≤n≤105
输入样例:
5
1 2 2 3 5
输出样例:
3
算法
双指针 O ( n ) O(n) O(n)
(暴力枚举) O ( n 2 ) O(n^2) O(n2)
时间复杂度
#include<bits/stdc++.h>
using namespace std;
int a[100000],ans[100000];
int main()
{
int n,maxx=-1;
cin>>n;
for(int i=0,j=0;i<n;i++)
{
cin>>a[i];
// }
// int sum=0;
// for(int i=0,j=0;i<n;i++)
// {
ans[a[i]]++;
while(ans[a[i]]>1)//举个例子1 2 2 3 4,走到第二个2,发现ans[ ]大于1,开始ans--,j++到a[2]不再大于1,j=3,
ans[a[j++]]--;
maxx=max(maxx,i-j+1);
}
cout<<maxx;
return 0;
}