java - 如何在不改变 Java 中的顺序的情况下找到一组整数的顺序?
问题描述
我试图找出一组未定义数量的整数的顺序。
例如它可能是 {30,60,10,100,20,50,110} 但我不想对它们进行排序,我想按照它们的顺序更改它们(或创建一个新数组)。
例如,前面给出的数组将变为 {3,5,1,6,2,4,7}。这是因为 30 是数组中的第一个数字,也是数组中第三小的数字。并且 60 是第 5 小的等等。因此我有新的数字升序而不改变它们在数组中的位置。
解决方案
我不知道它的可读性和效率如何,但我想尝试这样做。它从该范围创建一个整数流,[0, numbers.length - 1]
并使用这些数字作为原始数组的索引对它们进行排序。它最后加 1 以使范围从 1 开始。
int[] numbers = {30, 60, 10, 100, 20, 50, 110};
int[] order = IntStream.range(0, numbers.length).boxed()
.sorted(Comparator.comparingInt(e -> numbers[e]))
.mapToInt(e -> e + 1).toArray();
System.out.println(Arrays.toString(order)); // [3, 5, 1, 6, 2, 4, 7]
推荐阅读
- python - 为什么打印功能没有在正确的时间运行?
- ssh-tunnel - 通过代理的 AWS DocumentDB
- python - 在视频 ffmpeg 批处理脚本中显示文件名
- node.js - 我可以在不改变调用方式的情况下向 module.exports 添加第二个函数导出吗?
- azure-devops - Azure DevOps 管道复制文件任务目标目录值
- javascript - 重构 Javascript 数组
- c# - 当前上下文中不存在 FileUpload1
- html - 类不存在时如何选择选择器
- html - 如何在同一行中移动光滑的滑块和我的 div
- .net - 如何在 ML.NET 中加载保存的模型?