双指针模板题理解
作者:
搁浅.小城旧时光か
,
2022-02-28 20:03:02
,
所有人可见
,
阅读 219
#include<bits/stdc++.h>
using namespace std;
const int N=111111;//使用此写法方便更改数值
int main()
{
int n,a[N],s[N],r=0;//直接使用大N输入数组长度,a数组表示输入的每个数,即第几个数的标识,s数组表示每个数出现的次数
scanf("%d",&n);
for(int i=1,j=1;i<=n;i++)//括号里面定义i和j初值,全定义为1,后再加一即为数字串长度,且定义为1易记
{
scanf("%d",&a[i]);
s[a[i]]++;//把出现的每个数对应的次数加一
while(s[a[i]]>1)//当该数出现的次数大于一时继续循环
{
--s[a[j++]];//先自减,后右移,右移过程中再把出现过的数字的次数回归,且j代表第几个数
}
r=max(i-j+1,r);//用于计算长度,可保留最大值,且长度用从重复的时候减去上次j所在的位置(即上次重复的时候的位置),然后再加一
}
printf("%d",r);
}