题目如下:
解题思路:几千年前,一个古人曾经解过这个题目,他的名字叫做田忌,后人称他的解题思想叫做“田忌赛马”。言归正传,本题就是一个田忌赛马的问题,先将A与B进行排序,然后判断A[0]与B[0]的大小,如果A[0] > B[0],那么A[0]和B[0]就是一对,将A[0]和B[0]同时从数组删除;如果A[0] <= B[0],把A[0]存入一个holdspace,同时删除A[0],一直循环,直到len(A) = 0 为止,这些都是Advantage。如果B还有元素的话,那么就用holdspace中的元素和B配对,这些就属于非Advantage了。
代码如下:
class Solution(object): def advantageCount(self, A, B): """ :type A: List[int] :type B: List[int] :rtype: List[int] """ a = A b = B sb = B[:] sb.sort() a.sort() dic = {} queue = [] while len(sb) > 0 and len(A) > 0: if sb[0] < a[0]: if sb[0] not in dic: dic[sb[0]] = [a[0]] else: dic[sb[0]].append(a[0]) del sb[0] else: queue.append(a[0]) del a[0] res = [] for i in B: if i in dic: res.append(dic[i][0]) del dic[i][0] if len(dic[i]) == 0: del dic[i] else: res.append(queue[0]) del queue[0] return res