【教3妹学编程-算法题】Range 模块

3妹:哈哈哈哈哈哈哈哈
2哥 : 3妹看什么呢,笑的这么开森
3妹:2哥你快来看啊,成都欢乐谷的NPC模仿“唐僧”, 太搞笑了。
2哥 : 哦这个我也看到了,真的是唯妙唯肖,不能说像,只能说一模一样。
3妹:哈哈哈哈,西游记翻拍都可以找他助演了~
2哥:3妹今天刷题了嘛?说到模仿,我们今天来做一个模块的题吧~
3妹:咦,2哥你这个弯,拐的有点急啊。 不过是到了刷题时间了, 让我来看一下吧~

题目:
Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。
半开区间 [left, right) 表示所有 left <= x < right 的实数 x 。
实现 RangeModule 类:
RangeModule() 初始化数据结构的对象。
void addRange(int left, int right) 添加 半开区间 [left, right),跟踪该区间中的每个实数。添加与当前跟踪的数字部分重叠的区间时,应当添加在区间 [left, right) 中尚未跟踪的任何数字到该区间中。
boolean queryRange(int left, int right) 只有在当前正在跟踪区间 [left, right) 中的每一个实数时,才返回 true ,否则返回 false 。
void removeRange(int left, int right) 停止跟踪 半开区间 [left, right) 中当前正在跟踪的每个实数。
示例 1:
输入
[“RangeModule”, “addRange”, “removeRange”, “queryRange”, “queryRange”, “queryRange”]
[[], [10, 20], [14, 16], [10, 14], [13, 15], [16, 17]]
输出
[null, null, null, true, false, true]
解释
RangeModule rangeModule = new RangeModule();
rangeModule.addRange(10, 20);
rangeModule.removeRange(14, 16);
rangeModule.queryRange(10, 14); 返回 true (区间 [10, 14) 中的每个数都正在被跟踪)
rangeModule.queryRange(13, 15); 返回 false(未跟踪区间 [13, 15) 中像 14, 14.03, 14.17 这样的数字)
rangeModule.queryRange(16, 17); 返回 true (尽管执行了删除操作,区间 [16, 17) 中的数字 16 仍然会被跟踪)
提示:
1 <= left < right <= 10^9
在单个测试用例中,对 addRange 、 queryRange 和 removeRange 的调用总数不超过 10^4 次
思路:

列表+二分查找
详见代码:
java代码:
class RangeModule {TreeMap<Integer, Integer> intervals;public RangeModule() {intervals = new TreeMap<Integer, Integer>();}public void addRange(int left, int right) {Map.Entry<Integer, Integer> entry = intervals.higherEntry(left);if (entry != intervals.firstEntry()) {Map.Entry<Integer, Integer> start = entry != null ? intervals.lowerEntry(entry.getKey()) : intervals.lastEntry();if (start != null && start.getValue() >= right) {return;}if (start != null && start.getValue() >= left) {left = start.getKey();intervals.remove(start.getKey());}}while (entry != null && entry.getKey() <= right) {right = Math.max(right, entry.getValue());intervals.remove(entry.getKey());entry = intervals.higherEntry(entry.getKey());}intervals.put(left, right);}public boolean queryRange(int left, int right) {Map.Entry<Integer, Integer> entry = intervals.higherEntry(left);if (entry == intervals.firstEntry()) {return false;}entry = entry != null ? intervals.lowerEntry(entry.getKey()) : intervals.lastEntry();return entry != null && right <= entry.getValue();}public void removeRange(int left, int right) {Map.Entry<Integer, Integer> entry = intervals.higherEntry(left);if (entry != intervals.firstEntry()) {Map.Entry<Integer, Integer> start = entry != null ? intervals.lowerEntry(entry.getKey()) : intervals.lastEntry();if (start != null && start.getValue() >= right) {int ri = start.getValue();if (start.getKey() == left) {intervals.remove(start.getKey());} else {intervals.put(start.getKey(), left);}if (right != ri) {intervals.put(right, ri);}return;} else if (start != null && start.getValue() > left) {if (start.getKey() == left) {intervals.remove(start.getKey());} else {intervals.put(start.getKey(), left);}}}while (entry != null && entry.getKey() < right) {if (entry.getValue() <= right) {intervals.remove(entry.getKey());entry = intervals.higherEntry(entry.getKey());} else {intervals.put(right, entry.getValue());intervals.remove(entry.getKey());break;}}}
}相关文章:
【教3妹学编程-算法题】Range 模块
3妹:哈哈哈哈哈哈哈哈 2哥 : 3妹看什么呢,笑的这么开森 3妹:2哥你快来看啊,成都欢乐谷的NPC模仿“唐僧”, 太搞笑了。 2哥 : 哦这个我也看到了,真的是唯妙唯肖,不能说像,只能说一模一…...
SpringBoot+MybatisPlus Restful示例
增删改查,分页 CREATE TABLE tbl_book ( id int NOT NULL AUTO_INCREMENT, type varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, name varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, desc_ription varchar(255) CHAR…...
【数据结构】树与二叉树(十一):二叉树的层次遍历(算法LevelOrder)
文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…...
【PyQt】(自制类)处理鼠标点击逻辑
写了个自认为还算不错的类,用于简化mousePressEvent、mouseMoveEvent和mouseReleaseEvent中的鼠标信息。 功能有以下几点: 鼠标当前状态,包括鼠标左/中/右键和单击/双击/抬起鼠标防抖(仅超出一定程度时才判断鼠标发生了移动),灵…...
JAVA IDEA 下载
超简单步骤一: IntelliJ IDEA 官方下载链接 点击以上链接进入下图,点击下载 继续点下载,然后等待下载完后打开安装包即可 步骤二: 打开下好的安装包,点击Browse...我们把它下载到自己喜欢的地方(主要是别占…...
DevOps简介
DevOps简介 1、DevOps的起源2、什么是DevOps3、DevOps的发展现状4、DevOps与虚拟化、容器 1、DevOps的起源 上个世纪40年代,世界上第一台计算机诞生。计算机离不开程序(Program)驱动,而负责编写程序的人,被称为程序员&…...
体验前所未有的显示器管理体验:BetterDisplay Pro Mac
在现代的数字化时代,显示器是我们日常生活和工作中不可或缺的一部分。从笔记本电脑到台式机,从平板电脑到手机,几乎所有的电子设备都配备了显示器。然而,对于专业人士和从事设计行业的人来说,仅仅依靠系统自带的显示器…...
python用pyinstaller打包exe,去掉黑窗口
使用Python编写程序将Python脚本打包成可执行文件(EXE),但是会有一个命令框产生,很烦,所以,去掉这个框 1,安装pyinstaller pip install pyinstaller2,打包产生cmd命令框 pyinstaller --onefi…...
如何关闭Windows Defender(亲测可行!!非常简单)
一、背景 Windows Defender(简称WD)真的太讨厌了,经常给你报你下载的文件是病毒,且不说真的是不是病毒,它都不询问直接删。 另外聚资料显示WD还会不合时宜地执行扫描导致系统变慢(不会在合适的、空闲的时…...
【objectarx.net】创建多重引线
创建多重引线...
【objectarx.net】创建组,列出所有组,查找实体所在的组
创建组,列出所有组...
Llama2通过llama.cpp模型量化 WindowsLinux本地部署
Llama2通过llama.cpp模型量化 Windows&Linux本地部署 什么是LLaMA 1 and 2 LLaMA,它是一组基础语言模型,参数范围从7B到65B。在数万亿的tokens上训练的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需求…...
Coding面试题之手写线程池
原理图 JDK线程池原理 实现代码 1.线程类(PoolThread) 这个类用于执行任务队列中的任务。 public class PoolThread extends Thread {private final Queue<Runnable> taskQueue;private boolean isStopped false;private long lastTaskTime …...
【objectarx.net】删除零长度曲线和获取零长度曲线的数量
删除零长度曲线和获取零长度曲线的数量...
Win11专业版安装Docker Desktop,并支持映射主机的gpu
一、Windows环境下安装 Docker 必须满足: 1. 64位Windows 11 Pro(专业版和企业版都可以) 2. Microsoft Hyper-V,Hyper-V是微软的虚拟机,在win11上是自带的,我们只需要启动就可以了 二、下载Docker Desktop安装包 方式一:进入官网下载 https://docs.docker.com/desktop…...
Mac代码文本编辑器Sublime Text 4
Sublime Text 4 for Mac拥有快速响应的功能,可以快速加载文件和执行命令,并提供多种语言支持,包括C 、Java、Python、HTML、CSS等。此外,该编辑器还支持LaTeX、Markdown、JSON、XML等技术领域。 Sublime Text 4 for Mac的插件丰富…...
MATLAB中plot函数用法
目录 语法 说明 向量和矩阵数据 表数据 其他选项 示例 创建线图 绘制多个线条 根据矩阵创建线图 指定线型 指定线型、颜色和标记 在特定的数据点显示标记 指定线宽、标记大小和标记颜色 添加标题和轴标签 绘制持续时间并指定刻度格式 基于表绘制坐标 在一个轴…...
win10 安装vscode
1 Download Visual Studio Code - Mac, Linux, Windows 2 this user installer is not meant to be run as an administrator . if ou would like to install vs code for all users i this sys download the system installer instead form are u want to con 提示的意思是&a…...
MATLAB中Arrow 属性说明
目录 颜色和样式 位置 Arrow 属性是箭头的外观和行为。 Arrow 属性控制 Arrow 对象的外观和行为。通过更改属性值,可以修改箭头的特定方面。使用圆点表示法查询和设置属性。 ar annotation("arrow"); c ar.Color; ar.Color "red"; 颜色和…...
MYSQL 慢查询和慢查询日志
在数据库管理中,慢查询是指执行时间较长的 SQL 查询语句。这类查询可能导致系统性能下降,影响用户体验。为了帮助识别和解决这些性能问题,数据库管理系统通常提供了慢查询日志,用于记录执行时间超过一定阈值的查询。本文将深入探讨…...
【AI Agent实战】OpenClaw Skill 技能系统详解:从 Function Calling 到 MCP 到 Skill 的完整演进
关键词:OpenClaw Skill、AI Agent技能、MCP协议、Function Calling、AI工作流一、为什么装完 OpenClaw 还是感觉"没用" 安装完 OpenClaw 之后,很多人反馈一个共同问题:跟直接用 ChatGPT 感觉差不多,没看到明显差异。 原…...
ROHM BM1383GLV气压传感器驱动开发与低功耗集成
1. ROHM BM1383GLV气压传感器驱动技术解析ROHM BM1383GLV 是一款高精度、低功耗的 MEMS 气压传感器,采用 LGA-6(2.0 mm 2.0 mm 0.85 mm)超小型封装,专为可穿戴设备、IoT终端及环境监测类嵌入式系统设计。该器件基于压阻式原理&a…...
SQL中JOIN类型选择的业务逻辑分析_根据业务需求选择连接
INNER JOIN 不能用于需保留主表所有记录的场景,如统计未下单用户;错误地在LEFT JOIN的WHERE中过滤右表字段会使其退化为INNER JOIN;RIGHT JOIN基本可被LEFT JOIN替代;FULL OUTER JOIN在MySQL中不支持,业务“并集”宜用…...
大卫小东(Sheldon)难
Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成,将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...
前端使用AI试水报告扇
1 实用案例 1.1 表格样式生成 本示例用于生成包含富文本样式与单元格背景色的Word表格文档。 模板内容: 渲染代码: # python-docx-template/blob/master/tests/comments.py from docxtpl import DocxTemplate, RichText # data: python-docx-template/bl…...
大模型端侧部署必读:6类硬件约束下压缩算法适配矩阵(含INT4/FP8/FP16混合精度吞吐实测数据)
第一章:大模型工程化中的模型压缩算法对比 2026奇点智能技术大会(https://ml-summit.org) 模型压缩是实现大语言模型在边缘设备、低延迟服务及成本敏感场景中落地的关键工程环节。不同压缩路径在精度保留、推理加速比、部署兼容性与训练资源消耗上呈现显著差异&…...
英雄联盟LCU工具包:三分钟掌握智能自动化与数据分析利器
英雄联盟LCU工具包:三分钟掌握智能自动化与数据分析利器 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit࿰…...
实数序列DFT频谱的共轭对称性验证与IDFT重构实战
1. 理解实数序列DFT的共轭对称性 第一次接触信号处理时,我对DFT(离散傅里叶变换)频谱的共轭对称性感到非常困惑。记得当时用Python生成一个简单的正弦波序列,做FFT后发现频谱图左右对称,但具体数值关系却看不懂。后来才…...
CSS如何实现悬浮气泡提示框_利用-before与-after伪元素渲染尖角效果
用:before/:after画带尖角提示框的核心是仅用border透明边框生成三角形并精确定位,需设父容器position:relative、用px单位、避免:hover在移动端失效,且注意z-index和性能优化。怎么用 :before 和 :after 画出带尖角的悬浮提示框核心就两条:用…...
最后的轻量化机会窗口:2024Q3起CUDA 12.4+Triton 2.3将强制启用新梯度截断协议,旧蒸馏Pipeline即将失效
第一章:大模型工程化中的模型蒸馏技术 2026奇点智能技术大会(https://ml-summit.org) 模型蒸馏是将大型教师模型(Teacher Model)的知识高效迁移至轻量级学生模型(Student Model)的关键工程手段,其核心目标…...
