(一)指向一个序列
1.1去掉数组中重复元素(重载unique函数)
void unique(vector<int> &a)
{
//标志着下一个要插入的元素
int j=0;
for(int i=0;i<a.size();i++)
{
//如果i不是第一个元素,且i不和之前的元素相等
if(!i||a[i]!=a[i-1])
//printf("%d:%d\n",i,a[i]);
a[j++]=a[i];
}
}
1.2寻找最长无重复元素子序列
思路:1)枚举i是所有右端点的区间,左端点j最远在什么位置
2)当i往后移动后,j只能往后走
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=100010;
int a[N];
int S[N];
int 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]]++;
while(S[a[i]]>1)
{
S[a[j]]--;
j++;
}
res=max(res,i-j+1);
}
cout<<res;
}
(二)指向两个序列