leetcode870.优势洗牌

题目描述:

给定两个长度相等的数组 nums1nums2nums1 相对于 nums2优势 可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。

返回 nums1 的任意 排列,使其相对于 nums2 的优势最大化。

示例一:

cpp 复制代码
输入:nums1 = [2,7,11,15], nums2 = [1,10,4,11]
输出:[2,11,7,15]

示例二:

cpp 复制代码
输入:nums1 = [12,24,8,32], nums2 = [13,25,32,11]
输出:[24,32,8,12]

问题解决:

本题主要是要将nums1对于nums2的优势最大化,其实就是将nums1打乱重组,使对应位置上的值

比nums2的值大的数目变的最多,所以我盟首先要做的工作是将两个数组排序,排序之后在通过比

比大小的方式俩对nums1进行重新排序,但是在比较的排序之前必须记录nums2的初识顺序,应为

要用nums2的初识顺序来决定nums1的最终顺序,我们可以用一个下标数组来记录nums2对应的下

标顺序,对应的具体代码如下:

cpp 复制代码
class Solution 
{
public:
    vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) 
    {
        //1.排序
        int n = nums1.size();
        sort(nums1.begin(),nums1.end());
        vector<int> index2(n);
        for(int i = 0;i < n;i++)
        {
            index2[i] = i;
        }
        sort(index2.begin(),index2.end(),[&](int i,int j)
        {
            return nums2[i] < nums2[j];
        });

        //2.田忌赛马
        vector<int> ret(n);
        int left = 0,right = n - 1;
        for(auto x: nums1)
        {
            if(x > nums2[index2[left]])
            {
                ret[index2[left++]] = x;
            }
            else
            {
                ret[index2[right--]] = x;
            }

        }
        return ret;

    }
};

对应以示例二进行演示代码:

由上图可知,在比较的时候其实nums2的位置没有发生真是改变,而是通过下标对应进行了对

nums2的排序,而最终在对nums1排序的时候使用的是田忌赛马的方法,如果nums1的最小比不

过nums2的最小,直接将nums1的最小放在最后,取对抗最大的那个数,反之,如果nums1对应的

位置数较大,直接用来对抗nums2对应位置的数,这就是这道题的基本原理,

相关推荐
EterNity_TiMe_几秒前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心11 分钟前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds22 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
daiyang123...44 分钟前
测试岗位应该学什么
数据结构
alphaTao1 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian1 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz2 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang3 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca3 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法