C++ 代码
//滑动窗口--双指针
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+10,M=2010;
int a[N],s[M];
int main()
{
int m,n;
//cin>>n>>m;
scanf("%d%d",&n,&m);//数字比较大的时候用scanf会比较快
for(int i=0;i<n;i++) cin>>a[i];
int res=n+1;
int colors=0;//记录当前已有颜色数量
for(int i=0,j=0;i<n;i++)
{
if(a[i]&& !s[a[i]]) colors++;
s[a[i]]++;
if(colors==m)
{
while(!a[j]||s[a[j]]>1)
{
s[a[j]]--;
j++;
}
res=min(res,i-j+1);
}
}
if(colors!=m) res=-1;
cout<<res<<endl;
return 0;
}
输入以下:
13 5
2 5 2 3 1 3 2 4 1 0 5 4 3
预期输出7的 结果还是输出6
3 2 4 1 0 5