【发布时间】:2020-08-19 03:15:00
【问题描述】:
假设我有一个数组 A = [3, 6, 7, 5, 3, 5, 6, 2, 9, 1] 和 B = [2, 7, 0, 9, 3, 6, 0, 6, 2, 6]
重新排列数组 A 的元素,这样当我们按元素进行比较时,例如 3 与 2 以及 6 与 7 等等,我们将获得最大的胜利(A[i] > B[i] 是最大 (0<=i<len(A)) 的组合)。
我尝试了以下方法:
def optimal_reorder(A,B,N):
tagged_A = [('d',i) for i in A]
tagged_B = [('a',i) for i in B]
merged = tagged_A + tagged_B
merged = sorted(merged,key=lambda x: x[1])
max_wins = 0
for i in range(len(merged)-1):
print (i)
if set((merged[i][0],merged[i+1][0])) == {'a','d'}:
if (merged[i][0] == 'a') and (merged[i+1][0] == 'd'):
if (merged[i][1] < merged[i+1][1]):
print (merged[i][1],merged[i+1][1])
max_wins += 1
return max_wins
引用自
here
但是对于给定的 A 和 B,这种方法似乎没有给出正确的答案,即如果 A = [3, 6, 7, 5, 3, 5, 6, 2, 9, 1] 和 B = [2, 7, 0, 9, 3, 6, 0, 6, 2, 6] 则最大胜数为 7,但我的算法给出 5。
这里有我遗漏的东西吗?
@chqrlie 建议的修订解决方案
def optimal_reorder2(A,B):
arrA = A.copy()
C = [None] * len(B)
for i in range(len(B)):
k = i + 1
all_ele = []
while (k < len(arrA)):
if arrA[k] > B[i]:
all_ele.append(arrA[k])
k += 1
if all_ele:
e = min(all_ele)
else:
e = min(arrA)
C[i] = e
arrA.remove(e)
return C
【问题讨论】:
标签: arrays python-3.x sorting mergesort array-algorithms