arrays - 包含给定查询点的区间数
问题描述
我知道这里存在类似的问题。我的问题也相同,我有 N 个间隔(有些可能重叠,有些甚至相同)。然后给出Q点查询,我需要告诉有多少间隔包含这个点。
我尝试通过对端点数组进行排序然后按答案中提到的 +1、-1 技巧计算重叠间隔的数量来开发我的算法。但是在执行二进制搜索之后我应该做什么?因为前缀和数组的相应索引并不总是答案。
e.g.
Intervals are : [1,4] [5,7] [6,10] [7,13]
sorted end point array : [1,4,5,6,7,7,10,13]
+1/-1 array : [1,-1,1,1,1,-1,-1,-1]
prefix sum array : [1,0,1,2,3,2,1,0]
Query : 10
my algorithm gives 1 (corresponding prefix array)
but actual ans should be 2.
我应该如何修复我的算法?
解决方案
您链接的问题没有很好的答案,因此:
第一的:
- 将每个区间的进入和退出位置放入单独的数组中。(如果您使用封闭区间,则退出位置为结束位置 + 1,即在 [4,6] 中,进入为 4,退出为 7。
- 对数组进行排序。
然后,对于每个点 p:
- 在条目数组中进行二进制搜索以找到条目位置的数量 <= p。
- 在出口数组中进行二分搜索以找到出口位置的数量 <= p。
- 包含该点的区间数为 entry_count - exit_count
请注意,位置数 <= p 是第一个元素 > p 的索引。请参阅:执行二进制搜索的代码中的错误在哪里?帮助您正确进行搜索。
对于您的示例:
Intervals: [1,4], [5,7], [6,10], [7,13]
Entry positions: [1,5,6,7]
Exit positions: [5,8,11,14]
Entry positions <= 6: 3
Exit positions <= 6: 1
Intervals that contains 6: 3-1 = 2
推荐阅读
- deb - 如何在 preinst 中获取 deb 包所在目录
- java - Android如何检查互联网连接
- r - GLMM 结果取决于所选变量?
- code-server - 如何使用代码服务器运行我正在处理的项目
- django - vue + webpack:动态组件导入是如何工作的?
- javascript - 如何在使用 jest 从同一模块调用的第 3 方模块中模拟对类的构造函数的调用
- laravel - 仅在一台服务器上运行 Laravel 迁移(例如 ->onOneServer() 用于计划的 cronjobs)
- image - 在更新页面上单击更新按钮将图像数据从视图传递到控制器
- python - Aws lambda 为无错误事件管理 2 个状态代码
- bash - crontab 无法在容器环境中直接执行脚本