给定整数数组,重新排列数组,使元素按交替顺序排列
a1<a2>a3<a4>a5<a6>a7
您可以先对它进行 O(NLogN) 排序,然后重新排列。是否可以在 O(n) 时间内完成?
最佳答案
第 1 步:在 O(n) 时间内获取数组的中位数。我们可以通过 QuickSelect 获取第 (n/2) 个最大元素来做到这一点方法。
第 2 步:现在不要阅读这一步,想想解决方案,它很清楚。以上一步得到的数为支点,进行第一步quickSort。
第 3 步:现在中位数左侧的元素小于中位数,而右侧的元素大于中位数。
Step 4 : 左右交替取元素,你就会得到我们想要的!
关于algorithm - 中间的数字比邻居多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31896361/