滑动窗口 下标位置不超过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;
}