【发布时间】:2017-09-06 07:58:34
【问题描述】:
问题是:
给定一个未排序的数组,按照第一个元素最大、第二个元素最小、第三个元素第二大等方式对其进行排序。
跟进:你能做到不占用额外空间吗?
例子:
[2, 4, 3, 5, 1] -> [5, 1, 4, 2, 3]
我希望能够在不使用额外空间的情况下对数组进行排序。什么是最有效的解决方案?我只能想到一个 O(n2) 解决方案,它遍历数组以查找下一个最大和下一个最小元素。有没有更有效的解决方案?
我查看了相关问题 Sorting an array with alternate smallest and largest values 和 Sorting an array with alternate smallest-largest values,但答案对我的问题没有帮助。
【问题讨论】:
-
为什么链接问题的答案对您的问题没有帮助?最后一个提供了 O(n) 的工作代码,用于在排序后重新排列数组。在一般情况下,排序需要 O(n log n)。虽然如果您知道这些数字是唯一且连续的,您也可以在 O(n) 中进行排序。
-
@JimMischel 我不明白上一个问题中代码背后的逻辑,所以问了一个新问题。