我试图编写代码来解决Nuts&;使用快速排序(?)可以解决此问题,但效果不佳。对我来说,最令人困惑的部分是递归的返回点。我如何修改它?有没有关于递归返回点的建议
坚果及;螺栓问题: 给定一组不同尺寸的n个螺母和n个不同尺寸的螺栓。螺母和螺栓之间存在一一对应关系。有效地匹配螺母和螺栓。 约束:不允许将一个螺母与另一个螺母或螺栓与另一个螺栓进行比较。这意味着螺母只能与螺栓进行比较,螺栓只能与螺母进行比较,以确定哪个更大/更小。 问这个问题的另一种方式是,给定一个带锁和钥匙的盒子,盒子里的一把钥匙可以打开一把锁。我们需要配对
def smallerThanPartition(nuts, p):
lowN = []
for i in range(0, len(nuts)):
if p > nuts[i]:
lowN.append(nuts[i])
return lowN
def largerThanPartition(nuts, p):
highN = []
for i in range(0, len(nuts)):
if p < nuts[i]:
highN.append(nuts[i])
return highN
def ALG5(nuts, bolts, partition):
if(len(bolts) <= 1):
print('nuts + bolts = '+ str(nuts + bolts))
return nuts + bolts
else:
lowB = []
highB = []
a = []
b = []
lowN = []
highN = []
for i in range(0, len(nuts)):
if nuts[partition] > bolts[i]:
lowB.append(bolts[i])
lowN = smallerThanPartition(nuts, nuts[partition])
else:
highB.append(bolts[i])
highN = largerThanPartition(nuts, nuts[partition])
a = ALG5(lowN, lowB, len(lowN) / 2)
b = ALG5(highN, highB, len(highN) / 2)
return a + nuts[partition] + b
if __name__ == "__main__":
nuts = [1, 3, 5, 2, 44, 6]
bolts = [5, 2, 6, 44, 1, 3]
n = len(nuts)
partition = n / 2
print(ALG5(nuts, bolts, partition))
上述代码的结果是
[1, 1, 2, 3, 2, 5, 5, 6, 44, 44]
[1, 3, 5, 2, 44, 6]
[5, 2, 6, 44, 1, 3]
理想的结果是
[1, 2, 3, 5, 6, 44]
[1, 3, 5, 2, 44, 6]
[5, 2, 6, 44, 1, 3]
目前没有回答
相关问题 更多 >
编程相关推荐