【找到处理最多请求的服务器】

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

题目链接:找到处理最多请求的服务器
思路:
  1. 模拟
  2. 列出空闲的服务器,和正在忙碌的服务器
  3. 请求服务进来后,先更新忙碌的服务器,如果 arrival[i - 1] + load[i] < arrival[i]就把他丢给空闲的服务器里
  4. 如果当前没有空闲的服务器,则抛弃请求
  5. 进行查找空闲的服务器里的节点,考虑到如果 i % k找不到。就把请求丢给空闲里的第一个,把找到的服务器从空闲服务器丢到忙碌服务器里,接着把这个服务器处理请求的次数加1就行
  6. 最后找请求次数里最多的数,并遍历最终的请求次数数组,把相同请求次数服务器的序号找出来,放进答案数组
代码:
class Solution {
public:
    vector<int> busiestServers(int k, vector<int>& arrival, vector<int>& load) {
       priority_queue<int, vector<int>, greater<int>> available;
       
       for(int i = 0; i < k; i++){
           available.push(i);
       }
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>> > busy;
        vector<int> requests(k, 0);
        for(int i = 0; i < arrival.size(); i++){
            while(!busy.empty() && busy.top().first <= arrival[i]){
                auto[_, id] = busy.top();
                busy.pop();
                available.push(i + ((id - i) % k + k) % k); 
            }

            if(available.empty()){
                continue;
            }

            int id = available.top() % k;
            available.pop();
            requests[id]++;
            busy.push({arrival[i] + load[i], id});
        }
        int maxRequest = *max_element(requests.begin(), requests.end());
        vector<int> ret;

        for(int i = 0; i < k; i++){
            if(requests[i] == maxRequest){
                ret.push_back(i);
            }
        }
        return ret;

    }
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值