給定兩個大小相等的數組 A 和 B,A 相對於 B 的優勢可以用滿足 A[i] > B[i] 的索引 i 的數目來描述。
返回 A 的任意排列,使其相對於 B 的優勢最大化。
難點分析:
- 如何貪心匹配
- 如何保存匹配結果
貪心匹配:
- 田忌賽馬:總是在A中找到最小能大於B的元素與其匹配
- 這會剩下B[i]>max(A)的元素,將其和A未匹配元素任意匹配即可
保存匹配元素:
注意題目要按B原排列輸出,而對B排序後,匹配結果順序已變,所以一組數據記錄原排序,一組數據記錄匹配結果。;兩組數據生成原排序匹配
- 記錄原排序: ord_B=B.copy()(直接ord_B=B,是錯誤的,這是引用)
- 記錄匹配結果:d={b:[]},採用映射關係,鍵是B的元素。值是匹配結果,之所以是[],是因爲B中可能有相同元素,匹配結果不唯一。
原排序匹配:依次將ord_B的元素作爲鍵,讀取字典值的首元素,存入列表中。並刪除首元素
class Solution:
def advantageCount(self, A: List[int], B: List[int]) -> List[int]:
ord_B=B.copy()
A.sort()
B.sort()
k=0
d={b:deque() for b in B}
aa=[]
for a in A:
if a>B[k]:
d[B[k]].append(a)
k+=1
else:
aa.append(a)
for aaa in aa:
d[B[k]].append(aaa)
k+=1
now_A=[]
for b in ord_B:
now_A.append(d[b][0])
d[b].popleft()
return now_A