给你两个数组,arr1 和 arr2,

arr2 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

示例:

输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]

提示:

arr1.length, arr2.length <= 1000 0 <= arr1[i], arr2[i] <= 1000 arr2
中的元素 arr2[i] 各不相同 arr2 中的每个元素 arr2[i] 都出现在 arr1 中

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/relative-sort-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

拿到题,首先我们要知道这个题是排序数组,而且是根据arr2里的顺序进行加权的,我们比较的不是arr1的数据,是arr2的数据大小,但是填进去的是arr1的数据。所以我想到了用map,在map中,用unordered_map更快。

具体看我注释。

class Solution {public:vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {unordered_map<int,int> umap;for(int i = 0;i<arr2.size();i++){umap[arr2[i]] = i;//把数据进行加权}//加完权以后我们可以把数据进行比较了sort(arr1.begin(), arr1.end(), [&](int x, int y){//如果x,y都在arr2中出现,那么比较x,y在umap里的权值,如果x在里面,y不在里面,那么x就是大的if(umap.count(x)!=0) return (umap.count(y)!=0) ? umap[x] < umap[y] : true;//如果x不在,y在,那么y是大的,如果x和y都不在,就直接比较x和y本身大小。else return (umap.count(y)!=0) ? false : x<y;});return arr1;}
};

C++算法学习(力扣:1122. 数组的相对排序)相关推荐

  1. C++算法学习(力扣:1091. 二进制矩阵中的最短路径)

    在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, -, C_k 组成: 相邻单 ...

  2. C++算法学习(力扣:面试题 16.04. 井字游戏)

    设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...

  3. C++算法学习(力扣:134. 加油站)

    在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...

  4. C++算法学习(力扣:328. 奇偶链表)

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  5. C++算法学习(力扣:1269. 停在原地的方案数)

    有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处. 每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外). 给你两个整数 steps 和 arr ...

  6. C++算法学习(力扣:201. 数字范围按位与)

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...

  7. C++算法学习(力扣:402. 移掉K位数字)

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

  8. C++算法学习(力扣:859. 亲密字符串)

    给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true :否则返回 false . 交换字母的定义是取两个下标 i 和 j (下标 ...

  9. C++算法学习(力扣:1003. 检查替换后的词是否有效)

    给定有效字符串 "abc". 对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V.(X 或 Y 可以为空.)那么,X ...

最新文章

  1. matlab 流程计算方法,吸波材料LLG公式计算复磁导率的过程及matlab程序
  2. BERT轻量化:最优参数子集Bort,大小仅为BERT-large16%
  3. display: none;、visibility: hidden、opacity=0区别总结
  4. oracle apply handler,做什么BaseHandler.apply_response_修复在django吗?
  5. 19号以后包括数组在内的所有内容(数组、函数、方法、dom操作)
  6. python api调用百度ai平台_Python 百度AI接口调用
  7. 为什么家里电信宽带不能用路由器了?要怎么解决?
  8. jquery匹配不区分大小写_jQuery实现contains方法不区分大小写的方法教程
  9. 谷歌浏览器怎么登录及开启同步功能
  10. 【Python讲义】WEEK 4
  11. 2014.7.8 第一天学习hfss13
  12. 【昊鼎王五】pip安装pymssql模块时报错“PEP 517”怎么解决?
  13. LINUX SPI设备驱动模型分析之二 SPI总线模块分析
  14. AD15批量修改引脚名字的方法
  15. JAVA社交平台项目第四天 消息通知系统
  16. ps 导出矢量图为svg,并上传iconfont
  17. json和ajax的使用
  18. 【时间序列】TFT:Temporal Fusion Transformers
  19. 初中数学老师计算机培训反思,初中数学老师考试反思
  20. python爬取qq好友_Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)...

热门文章

  1. Python的二进制位运算
  2. libnids libnet
  3. 【机器学习】Pima数据探索--七种武器
  4. 先批标准化还是先激活
  5. Ablation study 是什么意思?
  6. 关于C# .net JavaScript跨域
  7. C# OO(初级思想)。
  8. ViewPager使用记录2——展示动态数据
  9. 蜕变成蝶~Linux设备驱动中的并发控制
  10. 网络流之最小点权覆盖和最大点权独立集学习