根据这个佬的思路改编出来的代码@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; }感谢这个佬,感觉对双指针的理解加深了很多