核心思路
不记录出现频率,而是记录每个数k最后出现的位置index[k],若index[k]大于等于慢指针start,则令start=index[k]+1,并令index[k]值为快指针i,省略慢指针遍历的步骤
其他思路与y总讲解一致,这里不再赘述
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int index[N];
int main() {
int n, temp, start = 1;
int maxLen = 0, curLen = 0;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> temp;
if(index[temp] >= start) {
start = index[temp] + 1;
index[temp] = i;
maxLen = max(maxLen, curLen);
curLen = i - start + 1;
} else {
index[temp] = i;
curLen++;
}
}
maxLen = max(maxLen, curLen);
cout << maxLen;
return 0;
}