力扣1882.使用服务器处理任务

力扣1882.使用服务器处理任务

  • 两个优先队列

    • 一个放未使用的服务器
    • 一个放已使用的服务器
cpp 复制代码
  class Solution {
      using PLI = pair<long long, int>;
      using PII = pair<int, int>;
  public:
      vector<int> assignTasks(vector<int>& servers, vector<int>& tasks) {
          int m = servers.size(),n = tasks.size();
          priority_queue<PLI, vector<PLI>, greater<PLI>> busy;
          priority_queue<PII, vector<PII>, greater<PII>> idle;
          for(int i=0;i<m;i++)
              idle.emplace(servers[i],i);
          
          long long ts = 0;
          //把占用结束的服务器弹出
          auto release = [&]()
          {
              while(!busy.empty() && busy.top().first <= ts)
              {
                  auto &&[_,idx] = busy.top();
                  idle.emplace(servers[idx],idx);
                  busy.pop();
              }
          };
  
          vector<int> res;
          for(int i=0;i<n;i++)
          {
              ts = max(ts, (long long)i);
              //把占用结束的弹出
              release();
              if(idle.empty())
              {
                  ts = busy.top().first;
                  release();
              }
              //取未占用的服务器
              auto&& [_,idx] = idle.top();
              res.push_back(idx);
              busy.emplace(ts+tasks[i] , idx);
              idle.pop();
          }
          return res;
      }
  };
相关推荐
海绵宝龙2 分钟前
Vue 中的 Diff 算法
前端·vue.js·算法
闻道且行之6 分钟前
NLP 部署实操:Langchain-Chatchat API使用方法记录
服务器·自然语言处理·langchain
wadesir18 分钟前
高效计算欧拉函数(Rust语言实现详解)
开发语言·算法·rust
aini_lovee19 分钟前
基于扩展的增量流形学习算法IMM-ISOMAP的方案
算法
一只大侠的侠19 分钟前
Linux实战:动态进度条从零实现,多版本优化与缓冲区原理全解析
linux·运维·服务器
不染尘.21 分钟前
DHCP和HTTP2_3
服务器·网络·网络协议·计算机网络·http·udp·tcp
奔跑吧 android21 分钟前
【ubuntu】【unattended-upgrades 介绍】
服务器·数据库·ubuntu
gaize121322 分钟前
什么是服务器数据?为什么那么重要?
运维·服务器
white-persist24 分钟前
【内网运维】Netsh 全体系 + Windows 系统专属命令行指令大全
运维·数据结构·windows·python·算法·安全·正则表达式
锐湃27 分钟前
手写agp8自定义插件,用ASM实现路由跳转
java·服务器·前端