LeetCode:2747. 统计没有收到请求的服务器数目(滑动窗口 Java)

目录

2747. 统计没有收到请求的服务器数目

题目描述:

实现代码与解析:

滑动窗口

原理思路:


2747. 统计没有收到请求的服务器数目

题目描述:

        给你一个整数 n ,表示服务器的总数目,再给你一个下标从 0 开始的 二维 整数数组 logs ,其中 logs[i] = [server_id, time] 表示 id 为 server_id 的服务器在 time 时收到了一个请求。

同时给你一个整数 x 和一个下标从 0 开始的整数数组 queries 。

请你返回一个长度等于 queries.length 的数组 arr ,其中 arr[i] 表示在时间区间 [queries[i] - x, queries[i]] 内没有收到请求的服务器数目。

注意时间区间是个闭区间。

示例 1:

输入:n = 3, logs = [[1,3],[2,6],[1,5]], x = 5, queries = [10,11]
输出:[1,2]
解释:
对于 queries[0]:id 为 1 和 2 的服务器在区间 [5, 10] 内收到了请求,所以只有服务器 3 没有收到请求。
对于 queries[1]:id 为 2 的服务器在区间 [6,11] 内收到了请求,所以 id 为 1 和 3 的服务器在这个时间段内没有收到请求。

示例 2:

输入:n = 3, logs = [[2,4],[2,1],[1,2],[3,1]], x = 2, queries = [3,4]
输出:[0,1]
解释:
对于 queries[0]:区间 [1, 3] 内所有服务器都收到了请求。
对于 queries[1]:只有 id 为 3 的服务器在区间 [2,4] 内没有收到请求。

提示:

  • 1 <= n <= 105
  • 1 <= logs.length <= 105
  • 1 <= queries.length <= 105
  • logs[i].length == 2
  • 1 <= logs[i][0] <= n
  • 1 <= logs[i][1] <= 106
  • 1 <= x <= 105
  • x < queries[i] <= 106

Related Topics

  • 数组
  • 哈希表
  • 排序
  • 滑动窗口

实现代码与解析:

滑动窗口

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {public int[] countServers(int n, int[][] logs, int x, int[] queries) {int[] res = new int[queries.length];// Set<Integer> set = new HashSet<>();// 新建数组排序id,只queries数组排序会丢失原本顺序Integer[] ids = new Integer[queries.length]; for (int i = 0; i < queries.length; i++) {ids[i] = i;}Arrays.sort(logs, (a, b) -> a[1] - b[1]);Arrays.sort(ids, (a, b) -> queries[a] - queries[b]);int[] cnt = new int[n + 1]; // 记录机器是否在窗口中,因为可能有多个同种机器,所以不能只用set存,要记录一下数量int r = 0, l = 0; // 左右指针int tmp = 0; // 当前窗口中的机器种类for (int id: ids) {while (r < logs.length && logs[r][1] <= queries[id]) {if (cnt[logs[r][0]]++ == 0) {tmp++;}r++;}while (l < logs.length && logs[l][1] < queries[id] - x) {if (cnt[logs[l][0]]-- == 1) {tmp--;}l++;}res[id] = n - tmp;}return res;}
}

原理思路:

  1. 初始化结果数组int[] res = new int[queries.length]; 创建一个与queries数组长度相同的结果数组res,用于存储每个查询的结果。

  2. 创建并排序查询索引数组:首先创建一个Integer类型的数组ids,长度与queries相同,用于存储查询的索引。然后,对ids进行排序,排序依据是queries数组中对应索引的值。这样做的目的是为了按照查询时间的顺序处理查询,同时保留原始查询的索引,以便将结果放回正确的位置。

  3. 对日志进行排序Arrays.sort(logs, (a, b) -> a[1] - b[1]); 按照日志中的时间戳对日志数组进行排序,确保日志是按时间顺序处理的。

  4. 初始化计数数组和双指针int[] cnt = new int[n + 1]; 创建一个计数数组cnt,用于记录每个服务器在当前时间窗口内接收到请求的次数。同时初始化两个指针l(左指针)和r(右指针),分别用于维护时间窗口的开始和结束。

  5. 遍历查询:通过for (int id: ids)循环遍历排序后的查询索引数组。对于每个查询,执行以下操作:

    • 扩展右边界:通过while循环,将r向右移动,直到logs[r][1](当前日志的时间戳)大于查询时间queries[id]。如果是服务器首次出现在窗口中(cnt[logs[r][0]]++ == 0),则tmp(当前窗口中的不同服务器数量)增加。
    • 收缩左边界:通过另一个while循环,将l向右移动,直到logs[l][1]小于queries[id] - x(查询时间减去时间间隔)。如果某服务器完全离开窗口(cnt[logs[l][0]]-- == 1),则tmp减少。
    • 计算结果res[id] = n - tmp; 计算在当前查询时间窗口内没有接收到请求的服务器数量,即总服务器数n减去窗口内有请求的不同服务器数量tmp

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

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

相关文章

提升产品竞争力之--IPD产品成本篇

在汉捷的咨询过程中&#xff0c;很多企业老总交流时都会提起这个抱怨&#xff1a;“现在产品竞争太激烈了&#xff0c;客户买产品首先看价格&#xff0c;你价格高一点就买别家的啦……” 汉捷咨询在前文谈到“通过定义产品包需求&#xff0c;来提升产品竞争力。差异化开发&…

【OpenAI】第二节(Token)关于ChatGPT的Token你了解多少?最全Token讲解过程!

在当今的人工智能领域&#xff0c;GPT&#xff08;Generative Pre-trained Transformer&#xff09;无疑是最受关注的技术之一。无论是在文本生成、对话系统&#xff0c;还是在内容创作中&#xff0c;GPT都展现出了强大的能力。然而&#xff0c;很多人对GPT的工作原理仍然存在疑…

MobileViT模型实现图像分类

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【Bi-LSTM-CRF实现中文命名实体识别工具(TensorFlow)】 2.【卫星图像道路检测…

跨界创新|使用自定义YOLOv11和Ollama(Llama 3)增强OCR文本识别

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

渗透测试导学

内容预览 ≧∀≦ゞ 渗透测试导学什么是渗透测试&#xff1f;安全服务&#xff08;安服&#xff09;与红队的区别常见渗透测试相关认证渗透测试的关键步骤打点阶段1. 信息搜集2. 漏洞扫描3. 漏洞挖掘 渗透阶段1. 权限维持&#xff08;持久化&#xff09;2. 权限提升3. 免杀与隐藏…

DevOps实践:在GitLab CI/CD中集成静态分析Helix QAC的工作原理与优势

基于云的GitLab CI/CD平台使开发团队能够简化其CI/CD流程&#xff0c;并加速软件开发生命周期&#xff08;SDLC&#xff09;。 将严格的、基于合规性的静态分析&#xff08;如Helix QAC所提供&#xff09;作为新阶段添加到现有的GitLab CI/CD流程中&#xff0c;将进一步增强SD…

如何使用 NumPy 和 Matplotlib 进行数据可视化

如何使用 NumPy 和 Matplotlib 进行数据可视化 在数据科学领域&#xff0c;NumPy 和 Matplotlib 是 Python 中最常用的两个库。NumPy 用于科学计算和数据处理&#xff0c;而 Matplotlib 提供了丰富的图表工具来展示数据。本文将介绍如何将这两个库结合使用&#xff0c;轻松进行…

现货黄金怎么交易能快速入门?

现货黄金交易的核心在于以小博大&#xff0c;即用较小的亏损去搏击较大的利润&#xff0c;成功不仅要靠资金上的管理&#xff0c;更需要心态和策略的支持。现货黄金交易的过程也是人性修炼的过程&#xff0c;新手投资者不仅要学会交易技巧&#xff0c;更需要学会控制情绪&#…

sql server 行转列及列转行

图1 图2 1.行转列 &#xff08;图1->图2&#xff09; 1.方法一 (数据库通用&#xff09;&#xff0c;使用max 加case when 函数 -- 行转列 图1->图2 SELECT name,MAX(CASE WHEN subject语文 THEN score ELSE 0 END) AS "语文",MAX(CASE WHEN subject数学 …

Python的pickle模块

pickle 是 Python 标准库中的一个模块&#xff0c;用于对象的序列化&#xff08;serialization&#xff09;和反序列化&#xff08;deserialization&#xff09;。 序列化是将对象转换为字节流的过程&#xff0c;而反序列化则是从字节流恢复对象的过程。 通过 …

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名&#xff0c;那么当使用进行 IP 请求时&#xff0c;则将会命中第一个配置的站点 以上图为例&#xff0c;如果用户使用 IP 访问&#xff0c;命中 example.com。 如果域名处填写的分别为域名与泛域名&#xff0c;除非准确命中域名&#xff0c;否…

深入剖析MySQL的索引机制及其选型

在数据库管理系统中&#xff0c;索引是一种重要的优化工具&#xff0c;用于加速数据的检索和查询处理。在MySQL中&#xff0c;合理使用索引可以显著提高数据库的性能。本文将深入探讨MySQL的索引机制&#xff0c;包括不同类型索引的优势、劣势及在实际使用中的选型策略。 1. 什…

将后端返回的网络url转成blob对象,实现pdf预览

调用e签宝返回的数据是网络链接就很让人头疼&#xff0c;最后想到可以转换成blob对象&#xff0c;便在百度上找到方法&#xff0c;记录一下。 祝大家节日快乐&#xff01;&#xff01; 代码在最后&#xff01;&#xff01;&#xff01;&#xff01; 代码在最后&#xff01;&a…

Yandex搜索广告开户与投放全攻略!

Yandex 是俄罗斯最大的搜索引擎与数字广告平台&#xff0c;在俄罗斯市场具有广泛的影响力和庞大的用户基础。以下是 Yandex 搜索广告开户与投放的全攻略&#xff0c;包括云衔科技支持的相关服务。 一、Yandex 搜索广告的优势 1、广泛的市场覆盖&#xff1a;Yandex 在俄罗斯的…

Git合并多个分支中的提交内容

IDEA中使用 IEAD编辑器中使用Git IEAD编辑器中使用Git 案例一&#xff1a; 把test分支的其中提交的内容合并到main分支上。 你现在通过IDEA开发的分支是test分支&#xff0c;当你在test分支把内容都写完了并且提交内容保存到了本地的git暂存区中的时候&#xff0c;如果此时你的…

接口测试(九)jmeter——关联(JSON提取器)

一、JSON提取器介绍 要检查的响应字段&#xff1a;样本数据源引用名称&#xff1a;可自定义设置引用方法&#xff1a;${引用变量名}匹配数字 匹配数字含义-1表示全部0随机1第一个2第二个…以此类推 缺省值&#xff1a;匹配失败时的默认值ERROR&#xff0c;可以不写 二、js…

C语言——字符串指针和字符串数组

目录 前言 一、定义区别 1、数组表示 2、指针表示 二、内存管理区别 1.字符数组 2.字符指针 三、操作区别 1、访问与修改 2、遍历 3...... 总结 前言 在C语言中&#xff0c;字符串随处可见&#xff0c;字符串是由字符组成的一串数据&#xff0c;字符串以null字符(\0)结尾&#…

记一次js泄露pass获取核心业务

文章目录 一、漏洞原因二、漏洞成果三、漏洞利用过程1.js泄露口令信息2、进入系统后台,管理数据库权限(22个)3、执行命令获取服务器权限4、通过添加扫描脚本,获取存活的内网信息四、免责声明一、漏洞原因 系统存在js泄露口令信息,获取系统超级管理员权限。系统为核心数据研…

ASP.NET MVC-font awesome-localhost可用IIS不可用

环境&#xff1a; win10, .NET 6.0&#xff0c;IIS 问题描述 本地IIS正常显示&#xff0c;但放到远程服务器上&#xff0c;每个icon都显示?。同时浏览器的控制台报错&#xff1a; fontawesome-webfont.woff2:1 Failed to load resource: the server responded with a statu…

Ubuntu下Mysql修改默认存储路径

首先声明&#xff0c;亲身经验&#xff0c;自己实践&#xff0c;网上百度了好几个帖子&#xff0c;全是坑&#xff0c;都TMD的不行&#xff0c;修改各种配置文件&#xff0c;就是服务起不来&#xff0c;有以下几种配置文件需要修改 第一个文件/etc/mysql/my.cnf 这个文件是存…