【发布时间】:2019-09-10 13:53:43
【问题描述】:
我有集合 {1,2,..n} 的三个不同排列,我想编写一些代码来计算所有三个排列中顺序相同的数字对的数量。
作为一个排列的例子。
{1,2,3}
(1,2,3).
(3,2,1)
有 0 个这样的对,它们的顺序相同,因为 (1,2,3) 和 (3,2,1) 按升序和降序排序
我想要一个最佳的O(N*logN) 解决方案。给出了一个提示,您必须在其中计算每个排列的反转次数,即
倒置是一对
(i,j)使得i > j但a[j] > a[i]
我可以在O(NlogN) 中做到这一点。
因此,如果一对以递增的顺序出现在每个排列中,那么肯定会为每个排列的每个反转计数加 1。但如果i > j 和
a[j] > a[i](全部按降序排列)因为我应该增加计数,但这对反转计数没有任何贡献。之后,如果我可以计算每个数组中的反转次数,但我没有看到它与同序对的数量之间的联系。
【问题讨论】:
-
添加一个示例(具有预期输出)会使这个问题更清楚。