如果我有n个数字,我如何找到包含这些数字的一半的最小间隔[a,b]?
答案 0 :(得分:0)
排序数字
将left
索引设置为0,将right
设置为n/2-1
,得到差异A[right]-A[left]
在for循环中走n / 2步,递增两个索引,再次计算差值,记住最小的索引和相应的索引。
答案 1 :(得分:0)
越来越多地对数字进行排序并计算所有差异A[i+n/2] - A[i]
。解决方案由最小化差异的指数给出。
<强>解释强>
不需要在包含少于n / 2个数字的区间(因为它们不满足条件)中搜索,也不需要在包含更多元素的区间中搜索(因为如果找到合适的区间,它就会赢得&t; t最小化,因为你可以删除极端元素。)
当元素被排序时,数组中的任何序列都以其第一个和最后一个元素为界。因此,对数字进行排序并滑动n / 2个元素的窗口就足够了。
现在判断这种O(n log n)方法是否最佳更具挑战性。
答案 2 :(得分:-1)
以下情况如何?
arr
中。arr
中查找d的最小值。对应于此d的i和i + [n / 2]的值是您的最小范围。