【教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 查询语句。这类查询可能导致系统性能下降,影响用户体验。为了帮助识别和解决这些性能问题,数据库管理系统通常提供了慢查询日志,用于记录执行时间超过一定阈值的查询。本文将深入探讨…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...