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

时间:2015-10-02 09:13:43

标签: c algorithm sorting mergesort insertion-sort

我正在www.hackerrank.com上提问,我已经被困了好几天了。

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

http://paste.ubuntu.com/12637144/这是我提交的代码。我使用合并排序并计算每个元素被移位的次数。该代码通过了超过一半的网站测试。当它失败时它不会超时,并且它没有编译错误或分段错误。

此外,当我获得其中一个失败的测试用例的输入时(以下是它在网站http://paste.ubuntu.com/12637165/上失败的输入)并使用我的代码http://paste.ubuntu.com/12637127/的这种变体对其进行了测试运行插入排序算法计算沿途的交换次数,并根据合并排序计数检查它,我通过所有测试。此外,我已经生成了数以千计的随机测试用例,并且他们也都使用了这个测试。

我认为这不是网站的问题,因为在讨论问题时,其他人似乎正在通过测试,没有任何问题或投诉。所以也许我误解了这个问题,或者我只是简单地编写算法和算法的测试用例。有没有人有任何建议?

1 个答案:

答案 0 :(得分:2)

如果n可以达到100000,那么没有。反转可以是〜= n ^ 2/2,它不适合32位整数。尝试使用64位整数进行计数和mergeSort的返回值。