【发布时间】:2020-06-12 00:11:48
【问题描述】:
我们想在给定的数字区间中找到中间元素。
假设给定一个包含 3 个区间的集合,它们是 { [1, 10], [20, 30],[35, 40]}。 (间隔总是不相交的)。
如果我们结合所有区间,我们会得到 25 个数字,如下所示:
1、2、3、4、5、6、7、8、9、10、20、21、22、23、24、25、26、27、28、29、 30、35、36、37、38、39、40
答案是中间元素,即第 13 个元素,即 22. 所以答案是 22。
但每个区间的范围都可以是 [1,1000000000]。鉴于 间隔你要计算中间元素。
是否有任何数据结构或算法来编码?
注意:如果有'n'个元素并且'n'甚至是答案 可以是第 (n/2) 个元素。
示例:如果我们合并区间,则总共有四个元素 那么第二个元素就是答案
【问题讨论】:
-
为什么不只用一个指针从底部和一个指针从顶部迭代间隔,保持元素数量的总和尽可能接近两边,然后找到中间?跨度>
-
我做不到。这需要很长时间,我会得到 TLE。
-
需要很长时间?这是 O(n),如果不查看所有区间,怎么能做得更好?
-
举个例子,我们在左边有 10 个,右边有 6 个,中间有 11 个。我们从 11 的右侧取 4,剩下 20-26,即 7 个元素。一分为二,两边取三,以 23 结尾(22 似乎不对——因为有 27 个元素,中间是第 14 个元素)。
-
通过 O(n),我的意思是 n 是给定的间隔数。
标签: algorithm data-structures numbers set