Python 3.x 如何改进此Hackerrank解决方案以避免超时?
问题: 我的解决方案:Python 3.x 如何改进此Hackerrank解决方案以避免超时?,python-3.x,mergesort,Python 3.x,Mergesort,问题: 我的解决方案: total_swaps = 0 def countInversions(a): global total_swaps total_swaps = 0 mergesort(a) return total_swaps def merge(arr, left, mid, right): global total_swaps buffer = arr[left:mid] arr_index = left arr1_
total_swaps = 0
def countInversions(a):
global total_swaps
total_swaps = 0
mergesort(a)
return total_swaps
def merge(arr, left, mid, right):
global total_swaps
buffer = arr[left:mid]
arr_index = left
arr1_index = 0
arr2_index = mid
while arr1_index < len(buffer) and arr2_index < right:
if buffer[arr1_index] > arr[arr2_index]:
arr[arr_index] = arr[arr2_index]
total_swaps += len(buffer) - arr1_index
arr2_index += 1
else:
arr[arr_index] = buffer[arr1_index]
arr1_index += 1
arr_index += 1
while arr1_index < len(buffer):
arr[arr_index] = buffer[arr1_index]
arr_index += 1
arr1_index += 1
def mergesort(arr, left=0, right=None):
if right is None:
right = len(arr)
if right - left <= 1:
return
mid = left + (right-left) // 2
mergesort(arr, left, mid)
mergesort(arr, mid, right)
merge(arr, left, mid, right)
total_swaps=0
def计数反转(a):
全球总量交换
互换总额=0
合并排序(a)
返回总交换
def合并(arr、左、中、右):
全球总量交换
缓冲区=arr[左:中]
arr_索引=左
arr1_指数=0
arr2_指数=mid
而arr1_索引arr[arr2\u索引]:
arr[arr_索引]=arr[arr2_索引]
掉期总额+=len(缓冲)-arr1\U指数
arr2_指数+=1
其他:
arr[arr\u索引]=缓冲区[arr1\u索引]
arr1_指数+=1
arr_指数+=1
当arr1_索引 如果右-左这里有一些小的改进,你可以尝试一下,但我怀疑它会获得很多好处:
- 从
countInversions()
调用mergesort(a,0,len(a))
并删除mergesort
中的默认参数值,右侧的测试为None
- 去掉全局变量,使
mergesort()
返回反转计数,它将通过添加递归调用的返回值来计算反转计数
- 在小块上使用插入排序,例如
如果右-左如果发布编码平台问题,会改进个人的算法方法,每个人都会这样做。最好自己去弄清楚,只在你失败的部分发表文章。