我正在尝试编写一个将整数列表作为输入并输出反转次数的反转计数器。由于它将处理大型列表,因此我使用了分而治之递归方法,但出现以下错误:
Traceback (most recent call last):
File "C:\Users\Jonathan\Desktop\py.py", line 34, in <module>
Inversions([1,2,3,4,5], 5)
File "C:\Users\Jonathan\Desktop\py.py", line 13, in Inversions
x = Inversions(numbers[:length/2 - 0.5], length/2-0.5)
TypeError: slice indices must be integers or None or have an __index__ method
def Inversions(numbers, length):
if length == 0:
return 0
else:
if length%2 == 0:
x = Inversions(numbers[:length/2], length/2)
y = Inversions(numbers[length/2:], length/2)
b = sorted(numbers[:length/2], length/2)
c = sorted(numbers[length/2:], length/2)
z = Split(b, c)
return x+y+z
elif length%2 == 1:
x = Inversions(numbers[:length/2 - 0.5], length/2-0.5)
y = Inversions(numbers[length/2 - 0.5:], length/2-0.5)
b = sorted(numbers[:length/2 - 0.5], length/2-0.5)
c = sorted(numbers[length/2 - 0.5:], length/2-0.5)
z = Split(b, c)
return x+y+z
def Split(first, second):
i = 1
j = 1
d = []
inversions = 0
for k in range(1,len(b)+1):
if b[i] < C[j]:
d[k] = b[i]
i += 1
else:
d[k] = c[j]
inversions += len(b[i:])
j += 1
return inversions
Inversions([1,2,3,4,5], 5)
最佳答案
length
是偶数,这将导致非整数浮点数。请改用整数除法。
x = Inversions(numbers[:length // 2], length // 2)
https://stackoverflow.com/questions/18140921/
相关文章:
wpf - 当应用程序类型为类库时,未定义的CLR namespace
ubuntu - 无法在Ubuntu 13.04中安装ARToolkit
vba - Excel VBA : Compiler Errors
c++ - 复制构造函数 - 编译器错误 C2040 和 C2440
java - 无法解析为类型-在RHEL 5上编译servlet(tomcat)时出错
android - 使用二进制文字数字时出错。为什么要使用旧的JDK?
c++ - KEIL错误: no instance of overloaded function “