zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    vgcreate语法
    lsmod语法
    lvm语法2
    lvm语法
    mount语法
    fdisk语法
    mdadm语法
    ln语法
    mknod语法
    黑客常用dos-cmd命令
  • 原文地址:https://www.cnblogs.com/seyjs/p/9317553.html
Copyright © 2011-2022 走看看