1. 先看如何用暴力法实现。
  2. 再分析是否有单调关系。
  3. 最后利用单调关系,套用双指针模板,将复杂度降低一个 n。

模板结构为 for 循环里面一个 while。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;

const int N = 100010;
int a[N], s[N];

int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
int res = 0;

for (int i = 0, j = 0; i < n; i++) {
s[a[i]]++;
while (s[a[i]] > 1) {
s[a[j]]--;
j++;
}
res = max(res, i - j + 1);
}
cout << res;
return 0;
}