【数组序号转换(1331-java)】
2023-09-27 14:29:28 时间
数组序号转换(1331-java)
给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。
序号代表了一个元素有多大。序号编号的规则如下:
序号从 1 开始编号。
一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。
每个数字的序号都应该尽可能地小。
示例 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]
public class LC238_1331_arrayRankTransform {
//排序
public static int[] arrayRankTransform(int[] arr) {
//使用优先队列解决
//1.初始化堆
//2.填入数据
//3.遍历
//4.填入结果集
if (arr == null || arr.length == 0) {
return new int[0];
}
PriorityQueue<Integer> queue = new PriorityQueue<>(arr.length, Comparator.comparingInt(a -> arr[a]));
for (int i = 0; i < arr.length; i++) {
queue.offer(i);
}
int[] res = new int[arr.length];
int rank = 1;
int last = -1;
while (!queue.isEmpty()) {
Integer curr = queue.poll();
if (last != -1 && arr[last] == arr[curr]) {
res[curr] = res[last];
} else {
res[curr] = rank;
rank++;
}
last = curr;
}
return res;
}
public static void main(String[] args) {
int[] ints = arrayRankTransform(new int[]{40, 10, 20, 30});
for (int s : ints) {
System.out.println(s);
}
}
}
相关文章
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
- Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-订单表的设计(源码可下载)
- Java 线程实例二(终止线程、生产者/消费者问题、获取线程状态、获取所有线程、查看线程优先级、中断线程)
- java基础集合数组间的转换(java集合五)
- java 时间格式转换带有时区+08:00
- Java对ad操作
- 4万字,200道Java面试题含答案!
- java在Linux执行命令Java在Windows执行命令
- AI来实现代码转换!Python转Java,Java转Go不在话下?
- Java中字符串和byte数组之间的相互转换
- android jni与java之间数据传输时怎么转换
- Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换
- java启动参数
- Java程序性能优化
- java多线程学习
- 第一次尝试学习java 安装jdk 与配置环境变量 写第一个java程序 并运行
- Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较(报错operator > cannot be applied to java.math.BigDecimal,int)
- 浅析Java中类型转换:String 与 int、long、Interger、char 互相转换/Java对象与Json字符串间的相互转换
- 字符和字节详解、Java中字节串和字符串相互转换
- Mybatis上路_06-使用Java自动生成[转]
- How to Iterate Over a Map in Java?(如何遍历Map)
- java痛苦学习之路[十二]JSON+ajax+Servlet JSON数据转换和传递
- Java生成骑缝章带有CA电子签名认证
- 多线程——Java中继承Thread类与实现Runnable接口的区别