首页 > 解决方案 > 如何获取 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}

标签: javaalgorithmsorting

解决方案


好的,我假设您想要以下内容:获取给定数组的前 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();

推荐阅读