2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left <= x < righ
2022-09-15: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) 中当前正在跟踪的每个实数。
输入:[“RangeModule”, “addRange”, “removeRange”, “queryRange”, “queryRange”, “queryRange”]
[[], [10, 20], [14, 16], [10, 14], [13, 15], [16, 17]]。
输出:[null, null, null, true, false, true]。
答案2022-09-15:
这是力扣715的题。用有序表。 动态开点线段树也行。
这道题是java运行速度远远领先go,但这是特例。其他力扣题,基本是持平的。
内存上来说,java是go的好几倍。
综合来说,go比java省资源。
rust自然是最省资源的,运行速度也是最快的。
代码用rust编写,代码如下:
use std::collections::BTreeMap;
struct RangeModule {
map: BTreeMap<i32, i32>,
}
impl RangeModule {
fn new() -> Self {
Self {
map: BTreeMap::new(),
}
}
fn add_range(&mut self, left: i32, right: i32) {
if right <= left {
return;
}
let start = self.map.range(..=left).last();
let mut start_key = 0;
let mut start_value = 0;
if !start.is_none() {
start_key = *start.unwrap().0;
start_value = *start.unwrap().1;
}
let end = self.map.range(..=right).last();
let mut end_key = 0;
let mut end_value = 0;
if !end.is_none() {
end_key = *end.unwrap().0;
end_value = *end.unwrap().1;
}
if start.is_none() && end.is_none() {
self.map.insert(left, right);
} else if !start.is_none() && start_value >= left {
self.map.insert(start_key, get_max(end_value, right));
} else {
self.map.insert(left, get_max(end_value, right));
}
let mut sets: Vec<i32> = vec![];
for (k, _) in self.map.range(left+1..=right) {
sets.push(*k);
}
for s in sets.iter() {
self.map.remove(s);
}
}
fn query_range(&mut self, left: i32, right: i32) -> bool {
let start = self.map.range(..=left).last();
let mut start_key = 0;
let mut start_value = 0;
if !start.is_none() {
start_key = *start.unwrap().0;
start_value = *start.unwrap().1;
}
if start.is_none() {
return false;
}
return start_value >= right;
}
fn remove_range(&mut self, left: i32, right: i32) {
if right <= left {
return;
}
let start = self.map.range(..=left).last();
let mut start_key = 0;
let mut start_value = 0;
let mut start_is_none = true;
if !start.is_none() {
start_key = *start.unwrap().0;
start_value = *start.unwrap().1;
start_is_none = false;
}
let end = self.map.range(..=right).last();
let mut end_key = 0;
let mut end_value = 0;
let mut end_is_none = true;
if !end.is_none() {
end_key = *end.unwrap().0;
end_value = *end.unwrap().1;
end_is_none = false;
}
if !end_is_none && end_value > right {
self.map.insert(right, end_value);
}
if !start_is_none && start_value > left {
self.map.insert(start_key, left);
}
let mut sets: Vec<i32> = vec![];
for (k, _) in self.map.range(left..right) {
sets.push(*k);
}
for s in sets.iter() {
self.map.remove(s);
}
}
}
fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
if a > b {
a
} else {
b
}
}
执行结果如下:

2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left <= x < righ的更多相关文章
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
- Lean Data Innovation Sharing Salon(2018.09.15)
时间:2018.09.15地点:北京国华投资大厦
- Python 标准类库-数字和数学模块之decimal使用简介
标准类库-数字和数学模块之decimal使用简介 by:授客 QQ:1033553122 例子 >>>from decimal import * >>>getcon ...
- Scheme实现数字电路仿真(3)——模块
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/12242650.html 作者:窗户 ...
- Webpack探索【15】--- 基础构建原理详解(模块如何被组建&如何加载)&源码解读
本文主要说明Webpack模块构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack的基础构建原理. 本文使用的W ...
- python常用模块(1):collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...
- python 多线程,tthread模块比较底层,而threading模块是对thread做了一些包装,multithreading
Python多线程详解 2016/05/10 · 基础知识 · 1 评论· 多线程 分享到:20 本文作者: 伯乐在线 - 王海波 .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 1.多线程的 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- 爬虫模块介绍--request(发送请求模块)
爬虫:可见即可爬 # 每个网站都有爬虫协议 基础爬虫需要使用到的三个模块 requests 模块 # 模拟发请求的模块 PS:python原来有两个模块urllib和urllib的升级urlli ...
随机推荐
- 01-第一个Spring程序
1.导包 所有和spring有关的包(有mybatis包的忽略),后期会使用maven引入 2. 引入spring的配置文件 可命名为applicationContext-service.xml或sp ...
- MAC下使用Wireshark调试chrome浏览器的HTTP/2流量
1.设置环境变量 mkdir ~/tls && touch ~/tls/sslkeylog.log #zsh echo "\nexport SSLKEYLOGFILE=~/t ...
- 在Vim编辑器中查找选定文本
按照任意选定文本查找: 1. 进入visiual模式选定文本, 按 y 键复制: 2. 按 / 键进入查找模式: 3. 按 Ctrl + r 打开vim寄存器: 4. 按 " 键将寄存器内容 ...
- 给jui(dwz)的navTab换一套漂亮的图标
上次讲了给jui(dwz)的菜单树换一套漂亮的图标,这次讲一下在点击菜单后,怎么把设置的漂亮图标带到navTab上去. 官方的navTab是这样显示的,除了默认的我的主页外,tab页上只有标题没有图标 ...
- 你的梦想家居「GitHub 热点速览」
上周推荐的 ChatGPT 版小爱,不知道有哪些小伙伴回去尝试接入了呢?本周依旧由 2 个不错的 ChatGPT 延伸项目,一个是比 DeepL.Grammarly 更懂你的划词翻译 openai-t ...
- PyQt5学习 (1)--对象的基本操作、QObject
参考视频:[Python-GUI编程-PyQt5 (少)] https://www.bilibili.com/video/BV17J41177ro/?share_source=copy_web& ...
- [nefu]C++程序设计与分析实验 - 锐格
[nefu]C++程序设计与分析实验 - 锐格 第二章 C++基础 5330 #include<iostream> #include<iomanip> using namesp ...
- docker中跑MySQL
mkdir xxx 创建一个目录 cd xxx 进入该目录 运行: sudo docker run -p 3306:3306 --name mymysql \ --restart=always -v ...
- [WEB]对于"Refused to execute script from 'http://xx.xx.xx/yy/zz.js' because its MIME type ('') is not executable, and strict MIME type checking is enabled."问题的解决办法
1 文由 阶段一:对WEB服务器HTTP通信的header设置了安全头(X-Content-Options:nosniff) 两个月前协助交付侧大哥处理.修复一个三级等保项目的第三方安全公司释出的安全 ...
- [Git]git分支查询——图像化[转载]
1 git reflog git reflog : 可查看所有分支的所有操作记录(含: commit / reset / merge / checkout等操作) 1-1 查看分支的所有变更记录(含: ...