我是编程新手。请在我的程序中提出其他问题,这将提高我的编程技能
Thanos排序是一种超级排序算法,其工作原理如下:如果未对数组进行排序,请用手指*删除项目的前半部分或后半部分,然后重复该过程。
给出一个输入数组,使用Thanos排序可以从中获得最长排序数组的大小是多少?
*需要无限手套。
输入 输入的第一行包含一个数字n(1≤n≤16)-数组的大小。 n保证是2的幂。
第二行输入包含n个以空格分隔的整数ai(1≤ai≤100)—数组的元素。
输出 返回可以使用Thanos sort获得的排序数组的最大长度。数组中的元素必须以非降序排序。
TypeError:具有注释错误的行上的'NoneType'和'NoneType实例之间不支持'<'
def find():
a = int(input())
if a%2==0 and a<=16 and a>=1:
x = input()
l = x.split()
p= lcheck(l)
r = rcheck(l)
if p < r: # error
return r
else:
return p
else:
print("enter the array length correctly")
find()
def lcheck(l):
n = len(l)
m= sorted(l)
if l==m:
return len(l)
else:
n=n//2
l=l[:n]
if len(l)>1:
lcheck(l)
else:
return 1
def rcheck(l):
n = len(l)
m= sorted(l)
if l==m:
return len(l)
else:
n=n//2
l=l[n+1:]
if len(l)>1:
rcheck(l)
else:
return 1
def splitint(x):
l = x.split()
l = list(map(int,l))
return l
find()
TypeError跟踪(最近一次通话) 在 42 l =列表(map(int,l)) 43返回l ---> 44个find()
<ipython-input-15-4486e758ce8e> in find()
6 p= lcheck(l)
7 r = rcheck(l)
----> 8 if p < r: # error
9 return r
10 else:
TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'
答案 0 :(得分:1)
您不返回递归lcheck和rcheck调用的结果(不返回->您将得到None),请将其更改为:
if len(l)>1:
return lcheck(l)
else:
return 1
更多提示:
答案 1 :(得分:0)
您的代码将无法通过以下测试用例:
16
78 16 40 90 4 13 99 19 41 47 50 68 71 79 96 76
下面是您可能想尝试的工作代码:
def lcheck(a):
if a == sorted(a):
return len(a)
else:
new_a = a[:len(a)//2]
if len(new_a) > 1:
if lcheck(new_a) >= rcheck(new_a):
return lcheck(new_a)
else:
return rcheck(new_a)
else:
return 1
def rcheck(a):
if a == sorted(a):
return len(a)
else:
new_a = a[len(a)//2:]
if len(new_a) > 1:
if lcheck(new_a) >= rcheck(new_a):
return lcheck(new_a)
else:
return rcheck(new_a)
else:
return 1
if __name__=="__main__":
n = int(input())
a = list(map(int, input().split()))
if lcheck(a) >= rcheck(a):
print(lcheck(a))
else:
print(rcheck(a))