[Swift]LeetCode715. Range 模块 | Range Module
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: https://www.cnblogs.com/strengthen/p/10509845.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
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): null removeRange(14, 16): null queryRange(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:
- A half open interval
[left, right)
denotes all real numbersleft <= x < right
. 0 < left < right < 10^9
in all calls toaddRange, queryRange, removeRange
.- The total number of calls to
addRange
in a single test case is at most1000
. - The total number of calls to
queryRange
in a single test case is at most5000
. - The total number of calls to
removeRange
in a single test case is at most1000
.
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
次。
Runtime: 2188 ms
Memory Usage: 20.9 MB
1 class RangeModule { 2 var v:[(Int,Int)] 3 4 init() { 5 v = [(Int,Int)]() 6 } 7 8 func addRange(_ left: Int, _ right: Int) { 9 var left = left 10 var right = right 11 var res:[(Int,Int)] = [(Int,Int)]() 12 var n:Int = v.count 13 var cur:Int = 0 14 for i in 0..<n 15 { 16 if v[i].1 < left 17 { 18 res.append(v[i]) 19 cur += 1 20 } 21 else if v[i].0 > right 22 { 23 res.append(v[i]) 24 } 25 else 26 { 27 left = min(left, v[i].0) 28 right = max(right, v[i].1) 29 } 30 } 31 res.insert((left, right),at:cur) 32 v = res 33 } 34 35 func queryRange(_ left: Int, _ right: Int) -> Bool { 36 for a in v 37 { 38 if a.0 <= left && a.1 >= right 39 { 40 return true 41 } 42 } 43 return false 44 } 45 46 func removeRange(_ left: Int, _ right: Int) { 47 var res:[(Int,Int)] = [(Int,Int)]() 48 var t:[(Int,Int)] = [(Int,Int)]() 49 var n:Int = v.count 50 var cur:Int = 0 51 for i in 0..<n 52 { 53 if v[i].1 <= left 54 { 55 res.append(v[i]) 56 cur += 1 57 } 58 else if v[i].0 >= right 59 { 60 res.append(v[i]) 61 } 62 else 63 { 64 if v[i].0 < left 65 { 66 t.append((v[i].0, left)) 67 } 68 if v[i].1 > right 69 { 70 t.append((right, v[i].1)) 71 } 72 } 73 } 74 res += t 75 v = res 76 } 77 } 78 79 /** 80 * Your RangeModule object will be instantiated and called as such: 81 * let obj = RangeModule() 82 * obj.addRange(left, right) 83 * let ret_2: Bool = obj.queryRange(left, right) 84 * obj.removeRange(left, right) 85 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了