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 ...
随机推荐
- 使用react-vite-antd,修改antd主题,报错 [vite] Internal server error: Inline JavaScript is not enabled. Is it set in your options? It is hacky way to make this function will be compiled preferentially by less
一般报错 在官方文档中,没有关于vite中如何使用自定义主题的相关配置,经过查阅 1.安装less yarn add less (已经安装了就不必再安装) 2.首先将App.css改成App.les ...
- 通过k8s部署服务
一 使用docker运行fastapi程序(python封装http接口) 一 docker commit 1 下载python3的镜像 docker pull python:3.8-slim # s ...
- laravel groupBy 分页
$model=DB::table('tablebname') ->where(function($query) use ($res){ $query->where('xx','xx'); ...
- python os模块总结-目录、文件操作工具
os (operating system)是python标准库中的操作系统接口,提供了很多与操作系统进行交互的函数,可快速对目录.文件进行操作. 下面我将在C:\Users\Administrator ...
- c++ 内存顺序
搞懂无锁编程的重要一步是完全理解内存顺序! 本教程由作者和ChatGPT通力合作完成. 都有哪几种? c++的内存模型共有6种 memory_order_relaxed memory_order_co ...
- Linux & 标准C语言学习 <DAY5>
一.if分支语句 if(表达式) //单分支语句 { //表达式的值为真,则执行此处代码 } if(表达式) //双分支语句 { ...
- 初学J2V8
V8和J2V8 V8 V8是Google开源的JavaScript和WebAssembly引擎,被用于Chrome浏览器和Node.js等.和其它JavaScript引擎把JavaScript转换成字 ...
- Linux 硬盘存储和文件系统介绍
一:硬盘存储 1.存储类型 根据存储的可以将存储分为内存和外存两类. 内存:又叫做主存储器,计算机中所有程序的运行都是在内存中进行. 外存:又叫做辅助存储器,因为内存容量小且断电会丢失所有数据.所以磁 ...
- Navicate 远程连接Mysql数据库
123步骤是在服务器上运行,第四步是在本机的navicate上运行 1.use mysql 2.update user set host = '%' where user = 'root' 3.flu ...
- SpringBoot——日志及原理
一.SpringBoot日志 选用 SLF4j(接口)和 logback(实现类),除了上述日志框架,市场上还存在 JUL(java.util.logging).JCL(Apache Commons ...