1.先暴力
2.对暴力进行优化 找单调性
模板:
for ( int i = 0, j = 0 ; i<n ; i++ )
{ while ( j < i&&check(i,j)) j++;
//每道题目的具体逻辑
}
可以把O(n^2)降到O(n)
应用:找出最长连续不重复子序列
1 2 2 3 5 ------- 3(2 3 5)
#include<iostream>
using namespace std;
const int N = 100010;
int n;
int a[N], s[N];
int main()
{
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]]++;//记录a[i]出现的次数,若大于1次需要动 j
while (s[a[i]] > 1)
{
s[a[j]]--;
j++;
}
res = max(res, i + 1 - j);
}
cout << res;
return 0;
}