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
}
}

执行结果如下:


左神java代码

2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left <= x < righ的更多相关文章

  1. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  2. Lean Data Innovation Sharing Salon(2018.09.15)

    时间:2018.09.15地点:北京国华投资大厦

  3. Python 标准类库-数字和数学模块之decimal使用简介

    标准类库-数字和数学模块之decimal使用简介 by:授客 QQ:1033553122 例子 >>>from decimal import * >>>getcon ...

  4. Scheme实现数字电路仿真(3)——模块

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/12242650.html 作者:窗户 ...

  5. Webpack探索【15】--- 基础构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack模块构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack的基础构建原理. 本文使用的W ...

  6. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  7. python 多线程,tthread模块比较底层,而threading模块是对thread做了一些包装,multithreading

    Python多线程详解 2016/05/10 · 基础知识 · 1 评论· 多线程 分享到:20 本文作者: 伯乐在线 - 王海波 .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 1.多线程的 ...

  8. 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时间 ...

  9. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  10. 爬虫模块介绍--request(发送请求模块)

    爬虫:可见即可爬   # 每个网站都有爬虫协议 基础爬虫需要使用到的三个模块 requests 模块  # 模拟发请求的模块 PS:python原来有两个模块urllib和urllib的升级urlli ...

随机推荐

  1. 安卓自动化查看包名和activity名的方法

    1,cmd下,adb shell "dumpsys window | grep mCurrentFocus" 2,CMD中输入adb logcat ActivityManager: ...

  2. WLAN的二层通信

    WLAN的二层通信中,无线接口收发的报文有4个地址: 发送地址(Transimission address),接收地址(Recevie address),源地址(Source address),目的地 ...

  3. LaTeX in 24 Hours - 3. Formatting Texts I

    文章目录 本章内容:文本格式 I 3.1 Sectional Units 3.2 Labeling and Referring Numbered Items 3.3 Texts Alignment 3 ...

  4. 嵌入式数据库 sqllite & h2  utils

    使用场景: 简单脚本,但是有需要数据记录. (使用前升级下版本) 我的使用: 老机器,老项目,jkd6,  需要记录 SqlLiteUtils package com.sea.edi.listener ...

  5. 对Javaweb的相关练习之利用.jsp文件和.java文件将输入的数据存储到指定的数据库中

    练习分析 import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.* ...

  6. 【微信网页授权】SpringBoot+uniapp实现网页授权获取用户基本信息

    前言 缘由 起因于本狗上一个项目本打算采用微信公众号网页授权登录做用户鉴权,但最终因公众号是未认证的订阅号,无权限获取用户信息,所以改变思路,采用登录注册方式实现用户区分.但在开发中,学习了微信网页授 ...

  7. Vue+ElementUI动态显示el-table某列(值和颜色)的方法

    方法一:结合 template scope组件和 v-if 语法判断 例1:值 <el-table-column prop="status" label="车辆状态 ...

  8. 万字血书React—走近React

    配置开发环境 脚手架工具create-react-app 储备知识:终端或命令行.代码编辑器 React官方中文文档 create-react-app 其是基于Node的快速搭建React项目的脚手架 ...

  9. python中socket使用UDP协议简单实现服务端与客户端通信

    UDP为不可靠传输,也就是发送方不关心对方是否收到消息,一般用于聊天软件.但现在的聊天软件虽然使用的是UDP协议,但已从代码层面上解决了丢失信息的问题. 下面使用python代码简单实现了服务端与客户 ...

  10. SpringIOC注入

    在lagou的训练营的学习历程 SpringIOC实例化Bean的三种方式:1.使用无参构造器2.静态方法3.实例化方法.他要先实例化创建类(和2的区别),再调用. XML注入属性DI依赖注入,根据实 ...