715. Range 模块

Range 模块是跟踪数字范围的模块。你的任务是以一种有效的方式设计和实现以下接口。

addRange(int left, int right) 添加半开区间 [left, right),跟踪该区间中的每个实数。添加与当前跟踪的数字部分重叠的区间时,应当添加在区间 [left, right) 中尚未跟踪的任何数字到该区间中。
queryRange(int left, int right) 只有在当前正在跟踪区间 [left, right) 中的每一个实数时,才返回 true。
removeRange(int left, int right) 停止跟踪区间 [left, right) 中当前正在跟踪的每个实数。

示例:

addRange(10, 20): null
removeRange(14, 16): null
queryRange(10, 14): true (区间 [10, 14) 中的每个数都正在被跟踪)
queryRange(13, 15): false (未跟踪区间 [13, 15) 中像 14, 14.03, 14.17 这样的数字)
queryRange(16, 17): true (尽管执行了删除操作,区间 [16, 17) 中的数字 16 仍然会被跟踪)

提示:

半开区间 [left, right) 表示所有满足 left <= x < right 的实数。
对 addRange, queryRange, removeRange 的所有调用中 0 < left < right < 10^9。
在单个测试用例中,对 addRange 的调用总数不超过 1000 次。
在单个测试用例中,对  queryRange 的调用总数不超过 5000 次。
在单个测试用例中,对 removeRange 的调用总数不超过 1000 次。
class RangeModule {TreeSet<Interval> ranges;public RangeModule() {ranges = new TreeSet();}public void addRange(int left, int right) {Iterator<Interval> itr = ranges.tailSet(new Interval(0, left - 1)).iterator();while (itr.hasNext()) {Interval iv = itr.next();if (right < iv.left) break;left = Math.min(left, iv.left);right = Math.max(right, iv.right);itr.remove();}ranges.add(new Interval(left, right));}public boolean queryRange(int left, int right) {Interval iv = ranges.higher(new Interval(0, left));return (iv != null && iv.left <= left && right <= iv.right);}public void removeRange(int left, int right) {Iterator<Interval> itr = ranges.tailSet(new Interval(0, left)).iterator();ArrayList<Interval> todo = new ArrayList();while (itr.hasNext()) {Interval iv = itr.next();if (right < iv.left) break;if (iv.left < left) todo.add(new Interval(iv.left, left));if (right < iv.right) todo.add(new Interval(right, iv.right));itr.remove();}for (Interval iv: todo) ranges.add(iv);}
}class Interval implements Comparable<Interval>{int left;int right;public Interval(int left, int right){this.left = left;this.right = right;}public int compareTo(Interval that){if (this.right == that.right) return this.left - that.left;return this.right - that.right;}}/*** Your RangeModule object will be instantiated and called as such:* RangeModule obj = new RangeModule();* obj.addRange(left,right);* boolean param_2 = obj.queryRange(left,right);* obj.removeRange(left,right);*/

Java实现 LeetCode 715 Range 模块(选范围)相关推荐

  1. LeetCode 715. Range 模块

    715. Range 模块 [有序集合]用TreeMap来进行有序集合的合并和拆分 class RangeModule {// 区间拆分与合并 9:34 10:31TreeMap<Integer ...

  2. LeetCode - OrderMap - 715.Range模块

    题目 715.Range模块 难度 困难 解法 class RangeModule {TreeSet<Interval> ranges;public RangeModule() {rang ...

  3. 【宫水三叶的刷题日记】715. Range 模块

    题目描述 这是 LeetCode 上的 715. Range 模块 ,难度为 困难. Tag : 「线段树」.「线段树(动态开点)」 Range 模块是跟踪数字范围的模块.设计一个数据结构来跟踪表示为 ...

  4. 715. Range 模块

    Range 模块是跟踪数字范围的模块.你的任务是以一种有效的方式设计和实现以下接口. addRange(int left, int right) 添加半开区间 [left, right),跟踪该区间中 ...

  5. leetcode:715. Range 模块【无脑segmentTree】

    分析 线段树区间更新 + 区间求和即可 ac code from functools import reduceclass SegTree:'''支持增量更新,覆盖更新,序列更新,任意RMQ操作基于二 ...

  6. java毕业设计——基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码)——安全模块

    基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+sqlserver的通用安全模块设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  7. JAVA计算机毕业设计毕业生导师双选系统Mybatis+系统+数据库+调试部署

    JAVA计算机毕业设计毕业生导师双选系统Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计毕业生导师双选系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开 ...

  8. boost::range模块heap算法相关的测试程序

    boost::range模块heap算法相关的测试程序 实现功能 C++实现代码 实现功能 boost::range模块heap算法相关的测试程序 C++实现代码 #include <boost ...

  9. boost::range模块uniqued相关的测试程序

    boost::range模块uniqued相关的测试程序 实现功能 C++实现代码 实现功能 boost::range模块uniqued相关的测试程序 C++实现代码 #include <boo ...

最新文章

  1. 【渗透】node.js经典问题
  2. Linux 软件管理工具之rpm、yum
  3. asp调用php函数,asp函数split()对应php函数explode()
  4. MySQL探索(一):B-Tree索引
  5. 2019\Province_C_C++_B\试题A-组队
  6. kafka 发布-订阅模式_使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...
  7. 蓝桥杯 ALGO-25 算法训练 Car的旅行路线
  8. 在线文本交集计算工具
  9. bzoj 1076 奖励关 状压+期望dp
  10. Vivado Launching SDK Importing Hardware Specification error的解决方法
  11. (33)STM32——485实验笔记
  12. Vue.js 作者尤雨溪:直接学 Vue 3 吧
  13. MySQL按日期依次统计
  14. Java各版本发布时间
  15. 2. 【containerd】 containerd-shim-runc-v1与 containerd-shim-runc-v2 区别
  16. 统一gis平台地图服务发布流程及使用
  17. 从零开始学黑苹果-基础安装教程(10.11.6)
  18. 牛人的求职面试经验,很有代表性!
  19. JavaScript的输出方式大全
  20. 字迹早就透露了你的性格:豪放者字体较大

热门文章

  1. DS实验4--求单链表交集与差集(含测试效果及实现)
  2. C语言dlopen()和dlsym()获取函数的运行时地址
  3. node.js 基础(含mongodb,express,express-art-template)
  4. mysql 截取身份证出生日期
  5. js时间戳转时间年月日时分秒
  6. 通达信指标公式编写常用函数(四)——EVERY、COUNT
  7. 程序员和工程师有什么不一样?
  8. 【C语言经典100例】 -- 28 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后
  9. Java千问:开发Java程序为什么要配置环境变量?
  10. Redis(2) redis-cli 客户端操作Redis - 常用命令大全