双指针算法样例

题目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;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容