我知道使用改进的归并排序,可以在O(n log(n))的时间内计算出n元素数组中逆序对的数量。然而,我发现了一种不同的解决方案,只要输入是(1, 2, 3, ..., n−1, n)的排列,就可以在O(n)的时间内计算逆序对的数量。注意:编辑后的内容如下:
很抱歉我贴上的代码并不适用于所有情况。实际上,这段代码是用于this question的,并且它通过了所有测试用例。但我仍然保留这段代码,以便它可能作为一些直觉和可能的线性时间解决方案来使用。
注意:下面提到的代码是不正确的。
/* int in = 0;
for (int i = 0; i < n; i++) {
a[i] = a[i] - i - 1;
}
for (int i = 0; i < n; i++) {
if (a[i] > 0)
in = in + a[i];
else if (a[i] < -1)
in = in - a[i] - 1;
} */
现在的问题是,我们能否为这个问题提出一个线性时间的解决方案?
i
在内部和外部的for
循环中都被修改了吗? - Mike