【发布时间】:2020-05-02 14:47:10
【问题描述】:
让 A 是一个包含 n 个元素的数组。 A 没有排序,但是,在对数组进行排序后,任何两个相邻元素之间的差异将是 k1,k2 或 k3.
需要注意的是k1、k2和k3没有给出,而且都是自然的!
例如,给定数组:
A = { 25, 7, 5, 9, 32, 23, 14, 21}对数组进行排序后,我们会得到 -
A = { 5, 7, 9, 14, 21, 23, 25, 32}第一对(5, 7)的差是2;所以k1=2,第三对(9,14)的差是5,所以k2=5,而第四对 (14, 21) 之间的差值为 7,因此 k3=7。其他相邻对之间的差值也是 2、5 和 7。
对数组排序的算法应该尽量做到最好(明显低于O(nlogn))。
我设法回答了一个类似的问题,其中任何两个相邻元素之间的差异是 k、2k 或 3k,其中 k 是真实的。但是我找不到一个合适的算法遵循类似的方法,通过找到 k,除以它并进行桶排序。
通过找到最小值和第二个最小值,我们可以找到 k 之一。但是 k 可能是 n2 - 所以找到最大值也无济于事......我真的迷路了!
免责声明:这个问题之前有人问过,但是没有给出答案,问题也不好理解。
【问题讨论】:
-
如果输入不满足约束,即一旦对数组进行排序后有超过3个不同的差异,你想做什么。
-
给定的数组应该总是满足上面写的特征。
-
这里的问题是什么?您似乎没有被要求编写排序算法。
-
找到一个对数组进行排序的算法(可能是O(n))
-
如果我理解正确,我们不能像您的示例那样假设我们可以通过简单地获取 4 个最低元素来获得 k1、k2 和 k3
标签: arrays algorithm sorting data-structures