根据这个佬的思路改编出来的代码@lnu20231491207
#include<bits/stdc++.h>
using namespace std;
int a[100010];
int c[100010];
int main()
{
int ans=0;
int n,k;cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1,j=1;i<=n;i++)
{
if(a[i]>k)//如果出现大于的数字,就把两个指针都汇聚到这个数字右边的第一个下标
{
i++;
while(j<i)
{
c[a[j]]--;
j++;
}
i--;//continue之后会更新i
continue;
}
c[a[i]]++;
while(c[a[i]]>1)
{
c[a[j]]--;
j++;
}
if(i-j+1==k) ans++;
}
cout<<ans<<endl;
return 0;
}
感谢这个佬,感觉对双指针的理解加深了很多
京公网安备 11010502036488号