Java 如何获取k min元素';s原始索引
我有一个类似{40,78,56,98,1,-9}的数组,这个数组的大小可能很大。我想得到第一个K min元素的索引。我可以使用最小堆/优先级队列以非常好的时间复杂度获得K min元素。但我不知道怎样才能得到他们的索引。请指导我如何解决我的问题 我曾尝试使用TreeMap来获得相同的结果,但若数组变大,那个么这将花费太多时间 范例 输入:{40,78,56,98,1,-9},K=2Java 如何获取k min元素';s原始索引,java,algorithm,sorting,Java,Algorithm,Sorting,我有一个类似{40,78,56,98,1,-9}的数组,这个数组的大小可能很大。我想得到第一个K min元素的索引。我可以使用最小堆/优先级队列以非常好的时间复杂度获得K min元素。但我不知道怎样才能得到他们的索引。请指导我如何解决我的问题 我曾尝试使用TreeMap来获得相同的结果,但若数组变大,那个么这将花费太多时间 范例 输入:{40,78,56,98,1,-9},K=2 输出:{5,4}好的,我假设您需要如下内容:获取给定数组前2分钟元素的索引。可以通过以下方式实现: int[] a
输出:{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();
如果允许使用优先级队列,则可以通过在初始化优先级队列时创建类对并传递比较器,在优先级队列中添加值和索引。 Pair类可以如下所示:
class Pair {
Pair(int val, int idx){
this.val = val;
this.idx = idx;
}
int val;
int idx;
}
Queue<Pair> maxHeap = new PriorityQueue<>(k, (pair1, pair2) -> -Integer.compare(pair1.val, pair2.val));
Queue maxHeap=new PriorityQueue(k,(pair1,pair2)->-Integer.compare(pair1.val,pair2.val));
在你的例子中你是如何得到{3,1}的?@NestorSokil对不起,我很愚蠢,现在它是正确的。看看我的答案,看看它是否适合你@ManishSharmaI想学习lambda和函数式编程,根据您的要求,应该是我的初始路径。上述方法都是关于比较两个对象的,您可以编写一个匿名类比较器,或者您可以在Pair类中实现可比接口,在这种情况下与函数式编程无关。关于lambdas,如果你尝试使用它们并将它们带到你的实践中,你会习惯的。学习和阅读同样的东西有多种来源。你可以很容易地通过谷歌找到它们。