在数组中查找具有更大索引但数组中值较小的元素[重复]
Posted
技术标签:
【中文标题】在数组中查找具有更大索引但数组中值较小的元素[重复]【英文标题】:finding elements in an array which have greater indicies but less value in an array [duplicate] 【发布时间】:2020-01-11 16:12:37 【问题描述】:我想查找数组中满足以下两个条件的元素个数:
-
1
a[i] > a[j]
我正在使用以下代码,但我需要更快的任何建议?
for(int i=0; i<n; i++)
for (int j=i+1; j<n; ++j)
if (a[j] < a[i])
ans++;
【问题讨论】:
一条建议;无论您使用什么算法,都可以测试带有优化启用的代码构建(也称为发布构建)。不要测试默认的调试版本。编译器优化可以产生巨大的性能差异。 当您说“更快的一个”时,您是指对于大数组大小渐近更快还是我们在谈论什么数组大小? @walnut 是的,我的意思是对于大数组大小是渐近的 @JesperJuhl 我记住了,谢谢你的提示:) 这能回答你的问题吗? Find the number of unordered pair in an array 或 Counting inversions in an array 【参考方案1】:您尝试执行的操作称为inversion count。渐近地说,你当前算法的复杂度是O(n^2)
。您可以使用基于合并排序的分而治之方法在O(nlogn)
时间内完成。阅读更多关于它的信息here。
【讨论】:
以上是关于在数组中查找具有更大索引但数组中值较小的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章