【寒假每日一题2022】acw1969 品种相邻【双指针+滑动窗口思想】

Date:2022.01.22
题意
农夫约翰的 N 头奶牛排成一排,每头奶牛都用其品种 ID 进行描述。
如果两头相同品种的牛靠得太近,它们就会吵架。
具体的说,如果同一品种的两头奶牛在队列中的位置相差不超过 K,我们就称这是一对拥挤的牛。
请计算品种 ID 最大的拥挤奶牛对的品种 ID。
输入格式
第一行包含两个整数 N 和 K。
接下来 N 行,每行包含一个整数表示队列中一头奶牛的品种 ID。
输出格式
输出品种 ID 最大的拥挤奶牛对的品种 ID。
如果不存在拥挤奶牛队,则输出 −1。
数据范围
1≤N≤50000,
1≤K<N,
品种 ID 范围 [ 0 , 1 0 6 ] 。 [0,10^6]。 [0,106]

思路:用队列维护一个长度为k+1的滑动窗口,双指针尺取区间长度为k+1。
代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
const int N = 5e4+10;
typedef long long LL;
queue<LL>q;
LL a[N],n,k;
map<LL,LL>mp;
int main()
{
    cin>>n>>k;
    LL maxx=-1;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(i<=k+1) 
        {
            q.push(a[i]);mp[a[i]]++;
            if(mp[a[i]]>=2) maxx=max(maxx,a[i]);
        }
    }
    for(int i=k+2;i<=n;i++)
    {
        LL jin=i,chu=i-k-1;
        mp[a[chu]]--;mp[a[jin]]++;
        q.pop();q.push(a[jin]);
        if(mp[a[jin]]>=2) maxx=max(maxx,a[jin]);
    }
    cout<<maxx;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值