大佬教程收集整理的这篇文章主要介绍了具有归并排序的倒数算法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试完成加州大学圣地亚哥分校在 Coursera 上提供的算法课程的作业,但遇到了问题...
我使用归并排序通过将左侧数组(a
数组)中剩余元素的数量与每次合并右侧数组(b
数组)中的元素时的计数相加来计算反转),但我真的不知道为什么它有时没有给出正确的反转次数,这让我发疯,这是代码和一些测试用例:
import sys
def get_number_of_inversions(a,left,right):
number_of_inversions = 0
# print(a)
if right - left <= 1:
return number_of_inversions
mID = (left + right) // 2
number_of_inversions = get_number_of_inversions(a,mID)
number_of_inversions = get_number_of_inversions(a,mID,right)
left_sIDe = a[left:mID]
right_sIDe = a[mID:right]
while len(left_sIDE) > 0 and len(right_sIDE) > 0:
if left_sIDe[0] <= right_sIDe[0]:
a[left] = left_sIDe[0]
left += 1
left_sIDe.remove(left_sIDe[0])
else:
a[left] = right_sIDe[0]
left += 1
right_sIDe.remove(right_sIDe[0])
number_of_inversions += len(left_sIDE)
if len(left_sIDE) == 0:
a[left] = right_sIDe[0]
left += 1
else:
a[left] = left_sIDe[0]
left += 1
return number_of_inversions
if __name__ == '__main__':
n = int(input())
a = List(map(int,input().split()))
print(int(get_number_of_inversions(a,len(a))))
测试用例:
6
9 8 7 3 2 1
这个应该给15,但它给了12
6
3 1 9 3 2 1
这个应该给9,但它给了8
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的具有归并排序的倒数算法全部内容,希望文章能够帮你解决具有归并排序的倒数算法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。