这个反转计数算法的实现有什么问题?

What is wrong with the implementation of this inversion count algorithm?

我正在做一个关于 www.hackerrank.com 的问题,我已经坚持了好几天了。

这里是问题的陈述https://www.hackerrank.com/challenges/insertion-sort。基本上,我必须计算在 O(nlog(n)) 时间内给定数组的插入排序中发生了多少次交换。

http://paste.ubuntu.com/12637144/ 这是我提交的代码。我使用合并排序并计算每个元素被置换了多少次。此代码通过了网站一半以上的测试。失败时不会超时,也不会出现编译错误或分段错误。

此外,当我得到一个失败的测试用例的输入时(这是它在站点 http://paste.ubuntu.com/12637165/) and tested it with this variation of my code http://paste.ubuntu.com/12637127/ 上失败的输入,它实际上运行插入排序算法,计算沿途的交换次数并根据合并排序计数检查它,我通过了所有测试。此外,我生成了数千个随机测试用例,它们也都通过了这个测试。

我认为这不是站点端的问题,因为在讨论该问题时,其他人似乎都顺利通过了测试,没有任何问题或投诉。所以也许我误解了这个问题,或者我只是在为算法编写错误的算法和测试用例。有人有什么建议吗?

如果n可以达到100000,那么第。反转可以是 ~= n^2 / 2 ,这不适合 32 位整数。尝试使用 64 位整数进行计数和 mergeSort 的 return 值。