算法学习之路 双指针算法
/*
双指针算法可以解决像最长不重复子序列一样的问题
思路:先暴力想思路判断check()的条件,再将n^2利用模板优化为n的双指针算法;
总思路模板:
for(int i = 1,j = 1;i < n;i++)
{
while(j < i && check())
{
j++;
s[a[i]]--;
}
res = max(res , i - j + 1);
}
*/
//处理最长不重复子序列的双指针算法
#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
int a[N];
int b[N];//注意标记数组的类型要与数组保持一致;
int main()
{
int n;
cin>>n; //数组长度为n
for(int i = 0;i < n;i++)
{
cin>>a[i];
}
int res = 0;
for(int i = 0,j = 0;i < n;i++)
{
b[a[i]]++;
while(j < i && b[a[i]] > 1)
{
b[a[j]]--;
j++;
}
res = max(res , i - j + 1);
}
cout<<res;
system("pause");
return 0;
}