algorithm - 中间的数字比邻居多

标签 algorithm puzzle

给定整数数组,重新排列数组,使元素按交替顺序排列

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/

相关文章:

c++ - 插入链表到链表

c - 如何在不使用任何比较运算符且不使用 if、else 等的情况下以编程方式返回两个整数的最大值?

c - C 数独检查器问题

algorithm - 带有 kleene star 的自动机

c++ - C++数据结构的拓扑排序

algorithm - 安排具有重叠周期性任务的工作人员

algorithm - 给定 4 个数组,找到和为零的四元组的数量

swift - 这是我解决八皇后难题的快速代码

c# - 为什么这个方法需要递归?

algorithm - 需要帮助分析该算法的时间复杂度