day10
今天看了双指针算法
代码挺短 但思路很重要
include
using namespace std;
const int N=1e6+10;
int a[N],s[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int res=0;
for(int i=0,j=0;i<n;i++)
{
s[a[i]]++; //取新数组s[],a[i]有几次相同的,s[i]+几
while(s[a[i]]>1) //s[a[i]]>1时说明有重复,移动左指针前往下一个没有重复数字的位置
{
s[a[j]]--;
j++;
}
res=max(res,i-j+1); //i-j+1是右指针和左指之间的差+1
}
cout<<res<<endl;
return 0;
}
明天看离散化
预计再过几天就先看java了
浙公网安备 33010602011771号