加载中...

滑动窗口 下标位置不超过k

奶牛邻近https://www.acwing.com/problem/content/1971/

具体的说,如果同一品种的两头奶牛在队列中的位置相差不超过 K,我们就称这是一对拥挤的牛。
请计算品种 ID 最大的拥挤奶牛对的品种 ID。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

const int M = 1000010;//这里是范围大小 不需要离散化

int n, k;
int cnt[M];//cnt in q在队列里面的计数

int main()
{
    scanf("%d%d", &n, &k);

    int res = -1;
    queue<int> q;
    for (int i = 0; i < n; i ++ )
    {
        int id;
        scanf("%d", &id);

        if (cnt[id] > 0) res = max(res, id);
        cnt[id] ++ ;
        q.push(id);//放入id
        
        if (q.size() > k)//队列里面的元素超过k的时候才计算
        {
            cnt[q.front()] -- ;//对头元素数量-1
            q.pop();
        }
    }

    printf("%d\n", res);
    return 0;
}


posted @ 2022-02-16 15:38  liang302  阅读(43)  评论(0编辑  收藏  举报