刷题 田忌赛马

870. 优势洗牌

给定两个大小相等的数组 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会有重复的数字

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值