leetcode 715. Range Module 解题报告
来源:互联网 发布:天津淘宝商会会长 编辑:程序博客网 时间:2024/06/05 13:12
A Range Module is a module that tracks ranges of numbers. Your task is to design and implement the following interfaces in an efficient manner.
addRange(int left, int right)
Adds the half-open interval [left, right)
, tracking every real number in that interval. Adding an interval that partially overlaps with currently tracked numbers should add any numbers in the interval [left, right)
that are not already tracked.queryRange(int left, int right)
Returns true if and only if every real number in the interval [left, right)
is currently being tracked.removeRange(int left, int right)
Stops tracking every real number currently being tracked in the interval [left, right)
.Example 1:
addRange(10, 20): nullremoveRange(14, 16): nullqueryRange(10, 14): true (Every number in [10, 14) is being tracked)queryRange(13, 15): false (Numbers like 14, 14.03, 14.17 in [13, 15) are not being tracked)queryRange(16, 17): true (The number 16 in [16, 17) is still being tracked, despite the remove operation)
Note:
[left, right)
denotes all real numbers left <= x < right
.0 < left < right < 10^9
in all calls to addRange, queryRange, removeRange
.addRange
in a single test case is at most 1000
.queryRange
in a single test case is at most 5000
.removeRange
in a single test case is at most 1000
.A Range Module is a module that tracks ranges of numbers. Your task is to design and implement the following interfaces in an efficient manner.
主要用到了c++ map结构,map底层使用红黑树实现
class RangeModule {public: map<int,int> hm; RangeModule() { } void addRange(int left, int right) { if(left>right) return; std::map<int,int>::iterator iter1,iter2; iter1=hm.lower_bound(left); iter2=hm.lower_bound(right); if(iter1 == hm.end() && iter2==hm.end()){ hm[right]=left; }else if(iter2!=hm.end() && hm[iter2->first]<=right ){ int m = min(left,iter2->second); if(iter1 != hm.end() ) m = min(m,iter1->second); hm[iter2->first] = m; }else{ int m = left; if(iter1 != hm.end()) m = min(m,iter1->second); hm[right]= m; } iter1=hm.lower_bound(left); iter2 = hm.lower_bound(right); hm.erase(iter1,iter2); } bool queryRange(int left, int right) { std::map<int,int>::iterator iter; iter=hm.lower_bound(right); if(iter==hm.end()){ return false; } if(iter->second<=left) return true; else return false; } void removeRange(int left, int right) { if(left>right) return; std::map<int,int>::iterator iter1,iter2; iter1=hm.lower_bound(left); iter2=hm.lower_bound(right); if(iter1!=hm.end() && iter1->second <left ){ hm[left]=iter1->second ; } if(iter2!=hm.end() && iter2->second<right){ hm[iter2->first]=right; } iter1=hm.upper_bound(left); iter2=hm.upper_bound(right); hm.erase(iter1,iter2); }};/** * Your RangeModule object will be instantiated and called as such: * RangeModule obj = new RangeModule(); * obj.addRange(left,right); * bool param_2 = obj.queryRange(left,right); * obj.removeRange(left,right); */
阅读全文
1 0
- leetcode 715. Range Module 解题报告
- Leetcode Search for a Range 解题报告
- LeetCode解题报告--Search for a Range
- [LeetCode] Search for a Range 解题报告
- [leetcode] 370. Range Addition 解题报告
- LeetCode: Search for a Range 解题报告
- [Leetcode] 370. Range Addition 解题报告
- LeetCode-Bitwise AND of Numbers Range-解题报告
- LeetCode(303) Range Sum Query - Immutable解题报告
- [leetcode] 303. Range Sum Query - Immutable 解题报告
- [leetcode] 304. Range Sum Query 2D - Immutable 解题报告
- [leetcode] 34. Search for a Range 解题报告
- [leetcode] 308. Range Sum Query 2D - Mutable 解题报告
- [leetcode] 201. Bitwise AND of Numbers Range解题报告
- Leetcode #34. Search for a Range 范围搜寻 解题报告
- [leetcode] 307. Range Sum Query - Mutable 解题报告
- [leetcode] 327. Count of Range Sum 解题报告
- [Leetcode] 34. Search for a Range 解题报告
- 每日总结
- CLion
- 微服务架构:Eureka参数配置项详解
- web前端工程师----JavaScript语言
- linux常用命令总结
- leetcode 715. Range Module 解题报告
- ubuntu显示隐藏文件
- 语音生成
- Mybatis FAQ
- Python安装
- TensorFlow入门(2)-基本概念
- Encoding
- Handler 当做内部类,导致内存泄露的问题
- Java 简单类