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

news/2025/3/19 19:22:16/文章来源:https://www.cnblogs.com/hcrzhi/p/18231544

优势洗牌

题目

优势洗牌

 题目分析

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;}
};

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720037.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计程序,要求程序可以加入到一个多播组中并等待服务器发送数据包,并且程序还需要具有发送功能,如果收到数据包则把消息内容输出到终端

目录题目分析代码结果 题目小组实现,小组中的每位成员都需要设计程序,要求程序可以加入到一个多播组中并等待服务器发送数据包,并且程序还需要具有发送功能,如果收到数据包则把消息内容输出到终端, 消息内容格式 [消息来源IP 消息时间 ] : 消息内容 分析1.发送端需设置套…

Redisson 限流器源码分析

Redisson 限流器源码分析 对上篇文章网友评论给出问题进行解答:redis 的key 是否会过期 可以先阅读上篇文章: redis + AOP + 自定义注解实现接口限流 - 古渡蓝按 - 博客园 (cnblogs.com) 注解AOP 代码部分提取// 调用Reids工具类的rateLimiter 方法long number = RedisUtils.…

欧拉回路

概念 1.经过图中所有边恰好一次的通路称为欧拉通路或欧拉路(起点终点可以不一致) 2.经过图中所有边恰好一次的回路称为欧拉回路(起点终点一致) 3.判别方法:对于无向图G,G中存在欧拉回路当且仅当G中所有度非0的点是连通的且没有奇数度数的点 对于无向图G,G中存在欧拉路当且仅当G…

ElasticSearch性能原理拆解

逐层拆分ElasticSearch的概念Cluster:集群,Es是一个可以横向扩展的检索引擎(部分时候当作存储数据库使用),一个Es集群由一个唯一的名字标识,默认为“elasticsearch”。在配置文件中指定相同的集群名,Es会将相同集群名的节点组成一个集群。Node:节点,集群中的任意一个实…

图论

1 图论 1.1 图的建立1.1.1 领接表边权建图import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class Main {// 定义图的邻接表表示static List<int[]>[] g;// 节点数static int n;// 保存某种状态或结果的数组static int[] f;public s…

IO

IO电路其实就是指芯片的信号输入输出接口电路,其一般位于芯片版图的最外围。IO电路一般有以下几个功能: (1)实现电平转换 (2)提高驱动能力 (3)进行ESD保护 先说电平转换。芯片内部电路信号的高低电平和外部要求不一致时,这样通过IO电路可以实现电平的转换。 再说驱动能…

Level shifter

(M1由关断到开启,肯定是先进入饱和区,因为这个临界点时,M1的Vds=VDDH>Vgs-Vth1=VDDL-Vth1,肯定是饱和区) M1的饱和区电流肯定先是大于M3的线性区电流,使得N点持续由VDDH放电到地,这个过程不能使得M1电流小于M3电流,否则N点下拉失败,OUT无法输出高电平VDDH。也就是…

从上下文切换谈thread_local工作原理

介绍thread_local的实现原理从上下文切换谈thread_local工作原理 thread_local是什么 熟悉多线程编程的小伙伴一定对thread_local不陌生,thread_local 是 C++11 引入的一种存储类说明符,用于定义每个线程都有其独立实例的变量。每个线程对这些变量有自己的副本,而不共享其他…

POR

上电复位(POR)电路,其作用是保证在施加电源后,模拟和数字模块初始化至已知状态。基本上电复位(POR)功能会产生一个内部复位脉冲以避免"竞争"现象,并使器件保持静态,直至电源电压达到一个能保证正常工作的阈值。注意,此阈值电压不同于数据手册中给出的最小电…

C++U7-07-图的遍历进阶

学习目标 引例 深搜遍历 [【图的遍历进阶】有向图中的可达]【算法分析】 从 a 点广搜,并用 vis 数组标记从 a 能够到达的点,如果 vis b ​=true,则表示能够到达,否则反之。【参考代码】 #include<bits/stdc++.h> using namespace std; const int maxn = 2e5 + …