混合阵列的算法遵循某些约束

时间:2014-06-19 08:21:29

标签: 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)

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

抱歉mi英文不好

2 个答案:

答案 0 :(得分:4)

  1. 对数组进行排序

  2. 切成两半

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

  4. 如果elemnts的数量不均匀,则将最后一个元素移到前面

  5. 示例:

    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

答案 1 :(得分:0)

作为一种天真的方法,您可以先执行一些排序,然后将数组分组到相同大小的组。之后,相邻的组必须成对切换;如果组的数量是奇数,则需要将第一组切换到后面。

一个例子:

输入:9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1(已排序)

群组:(9 9) (8 8) (7 7) (6 6) (5 5) (4 4) (3 3) (2 2) (1 1)

组成对切换:(8 8) (9 9) (6 6) (7 7) (4 4) (5 5) (2 2) (3 3) (1 1)

第一组移到后面:(9 9) (6 6) (7 7) (4 4) (5 5) (2 2) (3 3) (1 1) (8 8)

也许可以改进这个想法以获得更好的算法。