当前位置:网站首页>1331. 数组序号转换 : 简单模拟题
1331. 数组序号转换 : 简单模拟题
2022-07-28 22:26:00 【宫水三叶的刷题日记】
题目描述
这是 LeetCode 上的 1331. 数组序号转换 ,难度为 简单。
Tag : 「模拟」、「哈希表」、「排序」
给你一个整数数组 arr
,请你将数组中的每个元素替换为它们排序后的序号。
序号代表了一个元素有多大。序号编号的规则如下:
序号从 开始编号。 一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。 每个数字的序号都应该尽可能地小。
示例 1:
输入:arr = [40,10,20,30]
输出:[4,1,2,3]
解释:40 是最大的元素。 10 是最小的元素。 20 是第二小的数字。 30 是第三小的数字。
示例 2:
输入:arr = [100,100,100]
输出:[1,1,1]
解释:所有元素有相同的序号。
示例 3:
输入:arr = [37,12,28,9,100,56,80,5,12]
输出:[5,3,4,2,8,6,7,1,3]
提示:
模拟
根据题意进行模拟即可。
对 arr
进行拷贝操作得到新数组 clone
,对 clone
数组进行排序,再使用哈希表记录元素与序号的映射关系,最后根据映射关系构造答案。
Java 代码:
class Solution {
public int[] arrayRankTransform(int[] arr) {
int[] clone = arr.clone();
Arrays.sort(clone);
Map<Integer, Integer> map = new HashMap<>();
int n = arr.length, idx = 0;
for (int i : clone) {
if (!map.containsKey(i)) map.put(i, ++idx);
}
int[] ans = new int[n];
for (int i = 0; i < n; i++) ans[i] = map.get(arr[i]);
return ans;
}
}
TypeScript 代码:
function arrayRankTransform(arr: number[]): number[] {
let clone = new Array<number>()
for (const i of arr) clone.push(i)
clone.sort((a,b)=>a-b)
let n = arr.length, idx = 0
let map = new Map<number, number>()
for (const i of clone) {
if (!map.has(i)) map.set(i, ++idx)
}
let ans = new Array<number>()
for (let i = 0; i < n; i++) ans.push(map.get(arr[i]))
return ans
};
时间复杂度: 空间复杂度:
最后
这是我们「刷穿 LeetCode」系列文章的第 No.1331
篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。
在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地
本文由 mdnice 多平台发布
边栏推荐
- DCAT in laravel_ Admin preliminary use record
- laptop外接显示器
- 动态规划问题(八)
- vscode下链接远程服务器安装插件失败、速度慢等解决方法
- ACM SIGIR 2022 | interpretation of selected papers of meituan technical team
- Newscenter, advanced area of attack and defense world web masters
- Have passed hcip and joined the company of your choice, and share the learning experience and experience of Huawei certification
- Software designer - intermediate, exam summary
- CV instance segmentation model sketch (1)
- Detailed principle explanation and verification results of digital clock based on FPGA
猜你喜欢
Sword finger offer 55 - I. depth of binary tree
The difference between {} and ${}
Web系统常见安全漏洞介绍及解决方案-CSRF攻击
Attack and defense world web master advanced area PHP_ rce
[TA frost wolf _may- "hundred people plan"] art 2.2 model basis
Install MySQL using Yum for Linux
Linux下安装Mysql5.7,超详细完整教程,以及云mysql连接
Solution: direct local.Aar file dependencies are not supported when building an aar
Samsung asset management (Hong Kong) launched yuancosmos ETF to focus on investing in the future tuyere track
Field injection is not recommended solution
随机推荐
Virtual lab basic experiment tutorial -8. Fourier transform (1)
Immutable x officially opens IMX token pledge detailed IMX pledge introduction optimistic about the development prospect of IMX
递归/回溯刷题(下)
【MySQL 8】Generated Invisible Primary Keys(GIPK)
Kali installs burpsuite professional
Introduction and solution of common security vulnerabilities in web system CSRF attack
Cmake basic learning
SQL实现将多行记录合并成一行
【MySQL系列】MySQL数据库基础
Event extraction and documentation (2018)
@Transactional 注解使用详解
Servlet运行原理_API详解_请求响应构造进阶之路(Servlet_2)
The difference between {} and ${}
AutoCAD -- import excel tables into CAD and merge CAD
Have passed hcip and joined the company of your choice, and share the learning experience and experience of Huawei certification
Advanced area of attack and defense world web masters ics-06
Concurrency in go
1-8 basic use of props
Doip communication of canoe application case
Linux之yum安装MySQL