哈希表就完事儿了,key是a[j]
,value是a[j]
出现次数
i
丢到前面,j
丢到后面,然后j++
往后面遍历,每次记录a[j]出现次数
m a p [ a [ j ] ] map[a[j]] map[a[j]],如果a[j]出现次数
2次及其以上 m a p [ a [ j ] ] > 1 map[a[j]]\gt 1 map[a[j]]>1,那么把原来a[i]出现次数-=1( m a p [ a [ i ] ] − − map[a[i]]-- map[a[i]]−−),然后把i往后挪( − − i --i −−i),直到a[j]出现次数 ≤ 1 , 也就是直到 m a p [ a [ j ] ] ≤ 1 \le1,也就是直到map[a[j]]\le 1 ≤1,也就是直到map[a[j]]≤1,
#include<iostream>
#include<unordered_map>
#define N 100086
using namespace std;int n,a[N],b[N];
int main(){cin>>n;for(int i=0;i<n;++i){cin>>a[i];}int res=0;unordered_map<int,int> map;for(int i=0,j=0;j<n;j++){map[a[j]]++;while(map[a[j]]>1){map[a[i++]]--;}res=max(res,j-i+1);}cout<<res<<endl;return 0;
}