【发布时间】:2016-10-23 12:02:30
【问题描述】:
考虑一个数组'a'。如果 a[i] > a[j] 和 i
例如,给定
int a[5] = {2, 3, 8, 6, 1}
这有 5 个“逆”:
(8,6) (2,1) (3,1) (8,1) (6,1)
我的任务是编写一个 C++ 程序来计算数组中“逆”对的数量,运行时间缩放为 O(n logn)
我的代码的运行时间为 O(n²):
int nghichdao(int a[], int n)
{
int d = 0;
for (int j = 1;j < n;j++)
for (int i = 0;i < j;i++)
if (a[i] > a[j]) {
d++;
cout << "(" << a[i] << "," << a[j] << ")" << endl;
}
return d;
}
如何将其改进为 O(n logn)?
【问题讨论】:
-
您已经尝试过什么了吗?询问“有什么想法吗?” 听起来太宽泛,无法在此提出。这可能会变成无休止的讨论,这是我们不想要的。该网站是关于简洁的常见问题解答,例如问答对。您可能还想阅读here。
-
对不起,因为这是我第一次问。我已经写了代码,但运行时间是 O(n^2)
-
提示:如果你不迭代那些
i < j为假的索引,那么你会得到n * log n。
标签: c++ algorithm time-complexity