美团笔试第二题--区间统计

这里写图片描述

基本思想:Map+窗口

#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#include<map>
using namespace std;

int main()
{
    int n,k,t;cin>>n>>k>>t;
    vector<int> a;
    int c;
    while(cin>>c){
        a.push_back(c);
        if(cin.get()=='\n')
            break;
    }

    int res=0;
    int p1=0,p2=k-1;
    map<int,int> tmp;

    for(int i=p1;i<=p2;i++){
        tmp[a[i]]++;
    }
    map<int,int>::iterator it;
    for(it=tmp.begin();it!=tmp.end();it++){
        if(it->second>=t){
            res++;
        }
    }

    while(p2<a.size()-1){
        tmp[a[p1]]--;
        p1++;p2++;
        tmp[a[p2]]++;
        int g=p1;
        while(g<=p2){
            if(tmp[a[g]]>=t){
                res++;
                break;
            }
            g++;
        }
    }

    cout<<res<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39003229/article/details/82591100
今日推荐