【发布时间】:2010-12-29 08:32:53
【问题描述】:
这是一个phone interview question:“查找数组中的反转数”。我猜他们的意思是 O(Nlog N) 解决方案。我相信它不会比 O(Nlog N) 更好,因为这是排序的复杂性。
similar question的答案可以总结如下:
-
计算元素应该移动的一半距离以对数组进行排序:复制数组并对副本进行排序。对于原始数组
a[i]的每个元素,在排序后的副本中找到它的位置j(二分查找),然后将两半的距离相加abs(i - j)/2。 -
修改
merge sort:修改merge以计算两个排序数组之间的反转并使用修改后的merge运行常规merge sort。这有意义吗?还有其他(可能更简单)的解决方案吗?电话面试是不是太难了?
【问题讨论】:
-
您可以在这里找到用 java 编码的 n log n 解决方案:stackoverflow.com/questions/337664/…