其他分享
首页 > 其他分享> > LC.870. Advantage Shuffle

LC.870. Advantage Shuffle

作者:互联网

在这里插入图片描述

class Solution1(object):
    def advantageCount(self, A, B):
        """
        方法1
        对于B中的每一个元素,在A中找出第一个比他大的元素
        超时
        58 / 67 test cases passed.
        """
        result = [-1]*len(A)
        A.sort()
        for i in range(len(B)):
            for j in range(len(A)):
                if A[j] > B[i]:
                    result[i] = A[j]
                    A[j] = A[j]*(-1)-1
                    break


        index = 0
        for i in range(len(result)):
            if result[i] == -1:
                while(index < len(A) and A[index] < 0):
                    index += 1
                if index == len(A):
                    break
                result[i] = A[index]
                index += 1
        return result

class Solution(object):
    """
    分别将A B进行降序排序,然后每次取A最大的取匹配B最大的,如果搞不定,就取A最小的补上,这样A可以保留较大的元素来与B抗衡
    这里注意要记录B中元素原来的位置,用个二元组
    """
    def advantageCount(self, A, B):
        A.sort(reverse=True)
        B =[[ele,idx] for idx,ele in enumerate(B)]
        B.sort(reverse=True)
        result = [-1]*len(A)
        left, right = 0, len(A)-1
        for i in range(len(result)):
            if A[left] > B[i][0]:
                result[B[i][1]] = A[left]
                left += 1
            else:
                result[B[i][1]] = A[right]
                right -= 1
        return result

标签:index,right,Shuffle,Advantage,range,len,LC.870,result,left
来源: https://blog.csdn.net/dpengwang/article/details/90896367