给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。
返回 A 的任意排列,使其相对于 B 的优势最大化。
输入:A = [2,7,11,15], B = [1,10,4,11]
输出:[2,11,7,15]
输入:A = [12,24,8,32], B = [13,25,32,11]
输出:[24,32,8,12]
C++:
class Solution {
public:
vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
int size = nums1.size();
vector<pair<int, int>> Pair(size);
vector<int> res(size);
for(int i=0;i<nums2.size();i++){
Pair[i] = {nums2[i], i}; #注意这里的写法
}
sort(nums1.begin(), nums1.end());
sort(Pair.begin(), Pair.end());
auto it = Pair.begin();
auto rit = Pair.rbegin(); #这里如果写成end(),rit--后面会超出范围;
for(int i=0;i<nums2.size();i++){
if(nums1[i] > it->first){
res[it->second] = nums1[i];
it++;
}
else{
res[rit->second] = nums1[i];
rit++;
}
}
return res;
}
};
python:
class Solution:
def advantageCount(self, nums1: List[int], nums2: List[int]) -> List[int]:
pair = {b:[] for b in nums2}
que = []
A = sorted(nums1);
B = sorted(nums2);
j = 0
for a in A:
if a > B[j]:
pair[B[j]].append(a)
j += 1
else:
que.append(a)
return [pair[b].pop() if pair[b] else que.pop() for b in nums2] #pair[b].pop()不能写成pair[b][0], 因为nums2会有重复的数字