algorithm - 检查是否可以使用给定操作对排列进行排序

标签 algorithm sorting


我有以下问题:
我的任务是确定是否可以对给定的排列进行排序,但只使用一种类型的操作:我们可以将第 i 个元素向左移动两个位置。同样,元素 i-1 和 i-2 向右移动一个位置。

例如: 可以对排列 (2,5,3,4,1) 进行排序,但我们不能对排列 (2,3,5,4,1) 进行排序。

(2,5,3,4,1)
(2,4,5,3,1)
(2,3,4,5,1)
(2,3,1,4,5)
(1,2,3,4,5)

复杂度应该是线性的。 我想出了二次解,但它太慢了。我尝试了贪心法,但失败了。

这个问题让我完全卡住了。

最佳答案

如果有偶数次反转,则可以仅使用此操作对排列进行排序。您可以在 O(n log n) 中使用合并排序来计算倒置。

关于algorithm - 检查是否可以使用给定操作对排列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223511/

相关文章:

c++ - 与多组件 key 的快速部分匹配

python 3 : Optimised Bubble Sort

java - "Fast"Java中的整数幂

Java 数据库显示国家数据库表中的所有国家信息

sorting - Elasticsearch组排序组合查询

java - 在排序数组 X 中搜索第一个索引 i 使得 X[i] >= a

java - 将一个字符串放入另一个字符串java

python - 从第二个元素开始对python中的列表进行排序

algorithm - 以递减和顺序生成笛卡尔积

java - 寻找可排序对的数据结构的建议