首页 > 编程语言 >【每周例题】 C++ 力扣 优势洗牌

【每周例题】 C++ 力扣 优势洗牌

时间:2024-06-04 21:44:28浏览次数:16  
标签:C++ 力扣 ans idx2 idx1 例题 nums1 nums2 left

优势洗牌

题目

优势洗牌

 题目分析

1.采用双指针方法进行匹配

2.依照题目所说,采用索引,首先需要填充索引,然后对索引进行升序排序。

2.使用双指针进行匹配

  • 如果nums1[idx1[i]](即当前nums1中的元素)大于nums2[idx2[left]](即nums2中的当前最小元素),则将nums1[idx1[i]]赋值给ans[idx2[left]],并将left指针向右移动一位,以考虑nums2中的下一个最小元素。
  • 否则,如果nums1[idx1[i]]不大于nums2[idx2[left]],则将nums1[idx1[i]]赋值给ans[idx2[right]],并将right指针向左移动一位。这表示我们将nums1中的当前元素“匹配”给了nums2中的当前最大元素,因为我们无法找到一个更大的元素来“匹配”nums2中的当前最小元素。
if (nums1[idx1[i]] > nums2[idx2[left]]) 
{
  ans[idx2[left]] = nums1[idx1[i]];
  ++left;
}
else 
{
  ans[idx2[right]] = nums1[idx1[i]];
  --right;
}

代码

class Solution 
{
    public:
        vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) 
        {
            int n = nums1.size();
            vector<int> idx1(n), idx2(n);
            //iota函数用于填充idx1和idx2,将它们初始化为从0到n - 1的连续整数。
            iota(idx1.begin(), idx1.end(), 0);
            iota(idx2.begin(), idx2.end(), 0);
            //升序
            sort(idx1.begin(), idx1.end(), [&](int i, int j) { return nums1[i] < nums1[j]; });
            sort(idx2.begin(), idx2.end(), [&](int i, int j) { return nums2[i] < nums2[j]; });

            vector<int> ans(n);
            int left = 0, right = n - 1;
            for (int i = 0; i < n; ++i) 
            {
                if (nums1[idx1[i]] > nums2[idx2[left]]) 
                {
                    ans[idx2[left]] = nums1[idx1[i]];
                    ++left;
                }
                else 
                {
                    ans[idx2[right]] = nums1[idx1[i]];
                    --right;
                }
            }
            return ans;
        }
};

  

标签:C++,力扣,ans,idx2,idx1,例题,nums1,nums2,left
From: https://www.cnblogs.com/hcrzhi/p/18231544

相关文章

  • c 与 c++ struct
     在C语言和C++语言中,结构体的使用确实存在一些差异,特别是在结构体类型名称的使用上。具体而言:C语言:在C语言中,声明和使用结构体变量时,通常需要使用struct关键字,除非你使用typedef为结构体定义了一个别名。C++语言:在C++语言中,struct关键字在定义结构体类型......
  • C++U7-07-图的遍历进阶
    学习目标 引例 深搜遍历     [【图的遍历进阶】有向图中的可达]【算法分析】从a点广搜,并用vis数组标记从a能够到达的点,如果visb​=true,则表示能够到达,否则反之。【参考代码】#include<bits/stdc++.h>usingnamespacestd;constintm......
  • 【每周例题】C++ 力扣 旋转字符串
    旋转字符串 题目旋转字符串 题目分析方法1:模拟字符串1.采用双for循环去模拟字符串旋转,第一个for循环,模拟字符串循环位移;第二个for循环,进行逐个字符串检测2.使用if进行判断是否符合要求方法2:假设我们将goal字符串拆分为2个字符串,将其命名为R、L,我们将会得到以下式子go......
  • 力扣每日一题 6/4
    3067.在带权树网络中统计可连接服务器对数目[中等]题目:给你一棵无根带权树,树中总共有 n 个节点,分别表示 n 个服务器,服务器从 0 到 n-1 编号。同时给你一个数组 edges ,其中 edges[i]=[ai,bi,weighti] 表示节点 ai 和 bi 之间有一条双向边,边的权值为 we......
  • 快速入门C++正则表达式
    正则表达式(RegularExpression,简称Regex)是一种强大的文本处理工具,广泛用于字符串的搜索、替换、分析等操作。它基于一种表达式语言,使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式不仅在各种编程和脚本语言中被广泛支持,还是很多文本编辑器和处理工......
  • C++知识点
    explicit关键字explicit关键字explicit关键字在理解explicit关键字之前,我们必须要了解构造函数的类型转换作用,以便于我们更好的理解explicit关键字,如果有不懂构造函数,可以来看看这篇文章:构造函数点击查看代码classDate{public://构造函数Date(intyear):_......
  • 华为OD机试2024年最新题库(Python、JAVA、C、C++合集)C卷+D卷
    介绍博主介绍:CSDN领军人物top1的作者,全网粉丝30w+,文章累计被阅读3800w+,直接帮助200+,间接帮助800+同学进入od添加或私信博主免费获取本题解析以及代码24年5月份开始,考的都是OD统一考试(D卷),题库已经整理好了,命中率95%以上。5-10月份考的都是D卷真题,都是原题,圈内有多种......
  • C++ 强制类型转换运算符简介
    C++提供了四种强制类型转换运算符:static_cast、reinterpret_cast、const_cast和dynamic_cast。这些运算符各自具有特定的用途,适用于不同的类型转换需求。本文将详细介绍这四种运算符及其应用场景,并讨论它们在向上转换中的使用方法。1.static_caststatic_cast用于在编译时执......
  • C++ Builder 2010 绘制坐标
     一、步骤:1.先确定Image的位置,大小(可以不写)          2.设置初始面板,绘制初始的x,y坐标轴          3.画x,y向的刻度线,标刻x,y轴刻度          4.获取数据(可以不写)          5.将数......
  • 如何选择实名认证接口?C++身份证二、三要素实名认证接口提供厂商
    线上平台进行身份证实名认证,有助于保障交易的安全性,防止身份信息被盗用的风险,其主要应用于金融、在线银行、支付平台、社交媒体、账号注册、内容发布等多种应用场景。那么,又当如何选择实名认证接口厂家呢?翔云人工智能开放平台专注于API接口的提供,为有需要的企业提供了便......