[英]How to get k min element's original index
我有一個像 {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();
如果允許您使用優先級隊列,則可以通過創建類 Pair 並在初始化優先級隊列時傳遞比較器來在優先級隊列中添加值和索引。 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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.