java - 如何获取 k min 元素的原始索引
问题描述
我有一个像 {40,78,56,98,1,-9} 这样的数组,这个数组的大小可能很大。我想获得第一个 K min 元素的索引。我可以使用 min-heap/priority-queue 以非常好的时间复杂度获得 K min 元素。但我不知道如何获得他们的索引。请以某些方式指导我,我可以解决我的问题。
我曾尝试使用 TreeMap 来获得相同的结果,但如果数组变大,那将花费太多时间。
示例输入:{40,78,56,98,1,-9},K = 2 输出:{5,4}
解决方案
好的,我假设您想要以下内容:获取给定数组的前 2 分钟元素的索引。它可以实现如下:
int[] array = {5,75,73,4,78,6,4,3,4,3,64};
// stream the array of integers, box them, sort them by comparing values of their indexes, unbox them, limit only first 2 and get them to array.
int[] getIndexes = IntStream.range(0, array.length).boxed().sorted(Comparator.comparing(i -> array[i])).mapToInt(i->i).limit(2).toArray();
推荐阅读
- powershell - 方法调用 .Foreach 失败,System.Object 不包含名为“foreach”的方法
- java - 在位图图像上设置 onClickListener 会引发错误
- redis - Redis activedefrag 性能降低?
- apache-spark - 由于数据太少,Spark 作业运行时间过长
- python - Python:如何创建一组元组?
- spring-boot - 如何在同一个应用程序中创建具有客户端和服务器的 RSocket 应用程序?
- swift - 如何拥有一个运行数据库请求并从视图返回变量的 Swift 文件
- xamarin - Xamarin - 将文件下载到用户选择的特定目录
- excel - Excel VBA从两个日期在表格中创建和添加多行
- android - 数据未上传到 Firebase 数据库 (Android Studio)