LeetCode每日一题系列
题目:870. 优势洗牌
难度:中等
题目
示例
给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。
返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。
思路
贪心,遍历nums2中元素,每一次都挑选nums1剩余元素中大于nums2中元素的最小值,如果找不到大于nums2中的元素,使用nums1中剩余元素最小值代替。使用Python如果直接写双重for循环遍历寻找的话会超时,这里调入了一个Python的快速排序的列表库,减少了时间利用。
题解
# 有序列表
from sortedcontainers import SortedList
class Solution:
def advantageCount(self, A: List[int], B: List[int]) -> List[int]:
tmp = SortedList(A)
res = []
for num in B:
# 寻找大于该元素的下标
index = tmp.bisect_right(num)
# 如果符合条件,在tmp中删除,在答案中加上
if index < len(tmp):
s = tmp.pop(index)
# 找不到大于该元素的值,在tmp中删除最小的元素,在答案中加上
else:
s = tmp.pop(0)
res.append(s)
return res