【leetcode】870. Advantage Shuffle

题目如下:

解题思路:几千年前,一个古人曾经解过这个题目,他的名字叫做田忌,后人称他的解题思想叫做“田忌赛马”。言归正传,本题就是一个田忌赛马的问题,先将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

猜你喜欢

转载自www.cnblogs.com/seyjs/p/9317553.html