题目1:找到长度最短,含有所有数的序列。
样例数据
12 5
2 5 3 1 3 2 4 1 0 5 4 3
#include<iostream>
using namespace std;
const int N = 1000010, M = 2010;
int n, m;
int c[N], s[M];
int main()
{
scanf_s("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf_s("%d", &c[i]);
int res = n + 1;
int colors = 0;
for (int i = 1,j = 0; i <= n; i++)
{
if (c[i] && !s[c[i]]) colors++;
s[c[i]]++;
if (colors == m)
{
while (!c[j] || s[c[j]] > 1)
{
s[c[j]] --;
j++;
}
res = res > i - j + 1 ? i - j + 1 : res;
}
}
cout << res << endl;
system("pause");
return 0;