arrays - 混合数组遵守某些约束的算法

标签 arrays algorithm

我有这个问题:

我必须开发一种算法来获取一个 int 数组并根据这些约束重新排列元素:

对于每个元素,必须低于其邻居或大于其邻居:

for each x in array a,
( a[x-1]<=a[x] AND a[x+1]<=a[x] )
OR
( a[x-1]>=a[x] AND a[x+1]>=a[x] )

在最坏的情况下,这一切都在 theta(n log n) 中

我不知道该怎么做,我唯一的直觉是我必须做一些类似于合并排序的事情......

抱歉我的英语不好

最佳答案

  1. 对数组进行排序

  2. 把它切成两半

  3. 将前半部分的元素放在后半部分的元素之间

  4. 如果元素个数不足则将最后一个元素移到最前面

例子:

  1. 2 3 1 5 7 8 6 4 9

  2. 1 2 3 4 5 6 7 8 9

  3. 1 5 2 6 3 7 4 8 9

  4. 9 1 5 2 6 3 7 4 8

关于arrays - 混合数组遵守某些约束的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301903/

相关文章:

sql - PostgreSQL 根据数组值的组合选择行

java - 如何找到最大数组值的索引?

algorithm - 如何改进我的 "rotate (roll/cyclic permutation) array"解决方案?

algorithm - 生成速记函数签名

arrays - 最大限度。大于数组中给定数字的数字的距离

algorithm - 编写一个有效的算法将树划分为最多具有 V/2 个顶点的连通组件

algorithm - 显示每个节点出现一次并使用 Dijkstra 算法在 neo4j 中找到最短路径

php - 合并数组中的重复值

c - 如何正确声明此功能?

java - 如何从 Java 中的参数将项目添加到数组通用对象中