leetcode网站服务器,LeetCode 1606. 找到处理最多请求的服务器

news/2024/5/20 20:39:38/文章来源:https://blog.csdn.net/weixin_34812649/article/details/119407060

题目描述

你有 k 个服务器,编号为 0 到 k-1,它们可以同时处理多个请求组。每个服务器有无穷的计算能力但是 不能同时处理超过一个请求。请求分配到服务器的规则如下:

第 i(序号从 0 开始)个请求到达。

如果所有服务器都已被占据,那么该请求被舍弃(完全不处理)。

如果第 (i % k) 个服务器空闲,那么对应服务器会处理该请求。

否则,将请求安排给下一个空闲的服务器(服务器构成一个环,必要的话可能从第 0 个服务器开始继续找下一个空闲的服务器)。比方说,如果第 i 个服务器在忙,那么会查看第 (i+1) 个服务器,第 (i+2) 个服务器等等。

给定一个 严格递增 的正整数数组 arrival,表示第 i 个任务的到达时间,和另一个数组 load,其中 load[i] 表示第 i 个请求的工作量(也就是服务器完成它所需要的时间)。你的任务是找到 最繁忙的服务器。最繁忙定义为一个服务器处理的请求数是所有服务器里最多的。

请你返回包含所有 最繁忙服务器 序号的列表,你可以以任意顺序返回这个列表。

样例

6a45f0af035ddf4b3a6837789a840272.png

输入:k = 3, arrival = [1,2,3,4,5], load = [5,2,3,3,3]

输出:[1]

解释:

所有服务器一开始都是空闲的。

前 3 个请求分别由前 3 台服务器依次处理。

请求 3 进来的时候,服务器 0 被占据,所以它被安排到下一台空闲的服务器,也就是服务器 1 。

请求 4 进来的时候,由于所有服务器都被占据,该请求被舍弃。

服务器 0 和 2 分别都处理了一个请求,服务器 1 处理了两个请求。所以服务器 1 是最忙的服务器。

输入:k = 3, arrival = [1,2,3,4], load = [1,2,1,2]

输出:[0]

解释:

前 3 个请求分别被前 3 个服务器处理。

请求 3 进来,由于服务器 0 空闲,它被服务器 0 处理。

服务器 0 处理了两个请求,服务器 1 和 2 分别处理了一个请求。所以服务器 0 是最忙的服务器。

输入:k = 3, arrival = [1,2,3], load = [10,12,11]

输出:[0,1,2]

解释:每个服务器分别处理了一个请求,所以它们都是最忙的服务器。

输入:k = 3, arrival = [1,2,3,4,8,9,10], load = [5,2,10,3,1,2,2]

输出:[1]

输入:k = 1, arrival = [1], load = [1]

输出:[0]

限制

1 <= k <= 10^5

1 <= arrival.length, load.length <= 10^5

arrival.length == load.length

1 <= arrival[i], load[i] <= 10^9

arrival 保证 严格递增。

算法

(有序集) $O(n \log n + k)$

建立一个集合,存储当前所有待处理的请求,且按照开始时间从小到大排序。

用一个数组记录当前每台服务器上个任务的结束时间。

遍历每个请求,首先将该请求加入到待处理请求的集合中。对于 i % k 的服务器来说,不断地从待处理请求的集合中挑选出可以执行的,且开始时间最小的请求,这一步可以通过集合的二分操作 (lower_bound) 来实现。

如果取出的请求已经超过了 k 轮,则说明当初加入该请求时,不存在空闲的服务器,直接丢弃。用取出的请求来更新当前服务器的结束时间。

扫描所有服务器,统计答案。

时间复杂度

每个请求进出集合一次,每次进出需要 $O(\log n)$ 的时间。

寻找答案需要 $O(k)$ 的时间,故总时间复杂度为 $O(n \log n + k)$。

空间复杂度

需要 $O(n + k)$ 的额外空间存储每台服务器的结束时间,维护集合和答案。

C++ 代码

struct Request {

int st, ed, idx;

Request(int st_, int ed_, int idx_):st(st_), ed(ed_), idx(idx_){}

bool operator < (const Request &another) const {

return st < another.st;

}

};

class Solution {

public:

vector busiestServers(int k, vector& arrival, vector& load) {

const int n = arrival.size();

vector finishingTime(k, 0), res(k, 0);

set pendingRequests;

for (int i = 0; i < n + k; i++) {

int j = i % k;

if (i < n)

pendingRequests.insert(Request(arrival[i], arrival[i] + load[i], i));

while (1) {

auto it = pendingRequests.lower_bound(Request(finishingTime[j], -1, -1));

if (it == pendingRequests.end())

break;

if (i - it->idx < k) {

res[j]++;

finishingTime[j] = it->ed;

}

pendingRequests.erase(it);

}

}

int maxNum = 0;

for (int i = 0; i < k; i++)

if (maxNum < res[i])

maxNum = res[i];

vector ans;

for (int i = 0; i < k; i++)

if (maxNum == res[i])

ans.push_back(i);

return ans;

}

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_721124.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手学电脑入门教程_SEO必读:seo新手入门,如何快速起步?

点击“蓝字”免费学习“SEO知识”SEO必读SEO中文译为“搜索引擎优化”SE0必读&#xff1a;一个专注分享SEO知识的平台&#xff0c;带给你更多关于SEO的“优化技巧”&#xff01;学seo一定要有正确的思路&#xff0c;做符合规则的事情&#xff01;类似于“7天速成班”这类的商业…

php+mysql动态网站开发_滨州文化传媒网站php网站开发保证效果

山东百猫搜网络技术有限公司为您详细解读grGoqf滨州文化传媒网站php网站开发保证效果的相关知识与详情&#xff0c;通过合理的、有新意的页面规划&#xff0c;出格是主页设想&#xff0c;才能够将网页的内容完美地呈如今阅读者面前。表格及层排版是网页设想中的重要排版方式&am…

wordpress acf字段 不同样式_如何快速一键搬家WordPress网站(All in One WP Migration插件)...

迁移或是搬家WordPress站点通常是一件很麻烦的事情&#xff0c;需要一定的技术。无论是在两个不同的远程Web服务器之间&#xff0c;还是在开发服务器和生产服务器之间&#xff0c;还是从生产服务器到本地&#xff0c;您都可以通过许多方向进行迁移。在大多数情况下&#xff0c;…

网站木马检测_检测病毒,用这几个网站就够了

平时我们上网的时候经常需要下载各种各样的文件&#xff0c;但文件下载多了&#xff0c;难免会遇到一些可疑软件&#xff0c;一旦这些软件包含病毒&#xff0c;电脑轻则多几个软件&#xff0c;重则破财。而你想让电脑上的杀毒软件为你单独检测某个文件的时候却又发现&#xff0…

linux垃圾回收,垃圾回收算法_Linux编程_Linux公社-Linux系统门户网站

垃圾收集算法标记-清除算法最基础的收集算法是”标记-清除”(Mark-Sweep)算法&#xff0c;算法分为“标记”和“清除”两个阶段&#xff1a;首先标记出所有需要回收的对象&#xff0c;在标记完成后统一回收所有被标记的对象。标记-清除算法主要有两个不足&#xff1a;一个是效率…

网站SEO优化是什么(概念解释与SEM的区别)

SEM SEM&#xff08;搜索引擎营销&#xff09;基本思想是让用户发现信息&#xff0c;并通过(搜索引擎)搜索点击进入网站/网页进一步了解他所需要的信息。SEM的方法包括搜索引擎优化(SEO)、付费排名、精准广告以及付费收录 SEO SEO三大要素&#xff1a;标题、关键词、描述SEO是指…

php网站怎么找控制器,php控制器的方法在哪

控制器(Controller)的作用通常是在获取模型(Model)中数据并交给视图(View)去显示&#xff0c;那开发中我们应该如何去写呢&#xff1f;1.创建Controller的类文件,我这里文件名为MatchController.class.php(推荐学习&#xff1a;PHP编程从入门到精通)<?php /*** 比赛操作相关…

请你谈谈网站是如何访问的!

1.输入一个域名&#xff0c;回车 2.Windows系统会检查本机的&#xff1a;C:\Windows\System32\drivers\etc\hosts 配置文件下有没有这个域名映射 如果有&#xff0c;直接返回对应的ip地址&#xff0c;在这个地址中&#xff0c;有需要访问的web应用程序&#xff0c;可以直接访…

Scrapy爬取知名网站的图书信息

本文用 Scrapy 爬虫框架爬取专门供爬虫初学者训练用的网站&#xff1a;http://books.toscrape.com/ 打开虚拟环境创建项目文件打开控制台输入workon py3scrapy进入虚拟环境所在盘我的是E盘创建项目文件输入scrapy startproject demo创建的项目文件叫demo查看项目目录下的文件输…

Scrapy爬取知名技术网站文章并保存为Json格式

之前是爬取单个页面的内容&#xff0c;今天对所有文章进行爬取。 所有文章文章的地址&#xff1a;http://blog.jobbole.com/all-posts/ 对所有文章的URL进行提取提取第一页URL用 Request 库对提取的URL交给scrapy下载然后调用自己定义的解析函数提取下一页URL 把封面图下载下来…

Scrapy爬取知名技术网站文章并保存到MySQL数据库

之前的几篇文章都是在讲如何把数据爬下来&#xff0c;今天记录一下把数据爬下来并保存到MySQL数据库。 文章中有讲同步和异步两种方法。 所有文章文章的地址&#xff1a;http://blog.jobbole.com/all-posts/ 对所有文章的URL进行提取提取第一页URL用 Request 库对提取的URL交…

My-Blog搭建过程:如何让一个网站从零到可以上线访问

文章简述 5月13号的时候&#xff0c;上线了自己的个人博客网站&#xff1a;http://blog.hanshuai.xin&#xff0c;随后在平台上发布了一篇关于My-Blog的介绍博客《DockerSpringBootMybatisthymeleaf的Java博客系统开源啦》&#xff0c;有几位朋友在浏览网站之后也有私信问过我&…

收集45个实用的免费LOGO在线制作网站

有人说“即使一把火把可口可乐烧得精光&#xff0c;它也能凭借着它的LOGO东山再起。“当然了&#xff0c;至于有没有人说过&#xff0c;我们无法考证。但是这句话充分说明了一个LOGO所能发挥的作用。 LOGO对对大部分网站来说应该是不可或缺的一部分&#xff0c;对网站的拥有公司…

Windows下搭建Wordpress博客网站

一&#xff1a;安装wamp Windows下的ApacheMysql/MariaDBPerl/PHP/Python&#xff0c;一组常用来搭建动态网站或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大…

阿里云+wordpress搭建个人博客网站【小白专用的图文教程】

【声明】 欢迎转载&#xff0c;但请保留文章原始出处→_→ 生命壹号&#xff1a;http://www.cnblogs.com/smyhvae/ 文章来源&#xff1a;http://www.cnblogs.com/smyhvae/p/4965163.html 【正文】 在阿里云上搭建使用个人博客主要分为以下几个步骤&#xff1a; 1、购买阿…

Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例

目录 前言新建项目、建立数据库以及其它准备工作 新建express ejs 项目&#xff1a;sampleEjs创建数据库修改package.json文件,安装session和mysql模块样式和JQuery文件清理项目冗余文件&#xff0c;并添加监听 规划路由&#xff0c;并新建相关文件实现登录和注册需要的数据访…

推荐几款比较实用的工具,网站

1.盘百度PanDownload 这个云盘工具是免费的&#xff0c;可以进行资源搜索&#xff0c;提速&#xff08;偶尔会抽风&#x1f605;&#xff09; 不要去某站买付费的&#x1f60b; PanDownload下载地址 2.BeJSON 这是一款拥有各种在线工具的网站&#xff0c;推荐它的主要原因是网…

网站优化--图片的预加载与懒加载(上)

1、延迟加载即懒加载&#xff0c;主要目的是作为服务器前端的优化&#xff0c;减少请求数或延迟请求数&#xff0c;在一些图片非常多的网站中非常有用&#xff0c;当图片位置进入到可视区的时候才会被加载&#xff0c;这样对于含有很多 图片的比较长的网页来说&#xff0c;可以…

推荐一个命名变量的神奇网站 CODELF

我们在做项目的时候总是要对一些变量名、类名、函数名之类的东西有一个规范化的命名&#xff0c;但是怎么命名更好呢&#xff0c;这几天无意中翻阅到一个神奇的变量名命名网站 https://unbug.github.io/codelf/ 这个网站神奇之处是可以根据你输入的关键词&#xff0c;给出很多…

为何大量网站不能抓取?爬虫突破封禁的6种常见方法

在互联网上进行自动数据采集&#xff08;抓取&#xff09;这件事和互联网存在的时间差不多一样长。今天大众好像更倾向于用“网络数据采集”&#xff0c;有时会把网络数据采集程序称为网络机器人&#xff08;bots&#xff09;。最常用的方法是写一个自动化程序向网络服务器请求…