1606. 找到处理最多请求的服务器

 原题链接:1606. 找到处理最多请求的服务器

 

 

 solution: 模拟 + 有序集合 + 优先队列

typedef pair<int,int> PII;

class Solution {
public:
    vector<int> busiestServers(int k, vector<int>& arrival, vector<int>& load) {
        int n = arrival.size(); //保存请求的数量
        vector<int> cnt(k, 0);  //cnt数组保存每个服务器处理请求的次数
        set<int> avails;    //保存空闲的服务器,升序排列
        int Maxuse = 0; //保存处理的最多的请求次数
        priority_queue<PII, vector<PII>, greater<PII>> q;//定义小根堆
        //first保存处理请求的结束时间,second保存处理请求的服务器编号   

        for(int i = 0;i < k;i++) avails.insert(i);  //初始化将所有服务器插入avails

        for(int i = 0;i < n;i++){
            int t = arrival[i]; //保存当前请求到来的时间

            while(!q.empty() && q.top().first <= t){    //小根堆不为空,已经到达最快请求的结束时间
                avails.insert(q.top().second);  //将处理此请求的服务器插入avails
                q.pop();
            }

            if(avails.size() == 0){ //如果没有空闲服务器可以使用
                continue;   //无视本次请求
            }

            //反之则是有空闲服务器可以处理请求
            int cur = *avails.begin();  //保存最小的服务器编号
            auto iter = avails.lower_bound(i % k);  //按照题目要求寻找第一个大于等于i%k的空闲服务器
            if(iter != avails.end()){   //如果找到满足要求的空闲服务器
                cur = *iter;    //保存服务器编号
   
            }
            //反之则没有找到大于等于i%k的服务器,就用最小的服务器处理
            q.push({t + load[i], cur}); //结束时间和服务器编号入堆
            avails.erase(cur); //cur服务器进入繁忙状态
            ++cnt[cur]; //cur服务器处理的请求数量+1;
            Maxuse = max(Maxuse, cnt[cur]); //保存最大的使用次数
        }

        vector<int> res;    //定义返回值
         for (int i = 0; i < k; ++i)
        {
            if (cnt[i] == Maxuse)
            {
                res.push_back(i);
            }
        }

        return res;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值