查詢陣列中最小k個數

2021-09-25 18:45:07 字數 430 閱讀 8776

思路:可採用大頂堆來實現——維護乙個規模為k的大頂堆。

從前往後掃瞄陣列元素:

若大頂堆的size小於k,則把當前元素插入大頂堆中;

若小於k, 若當前元素小於堆頂元素,則刪除堆頂元素,插入當前元素。

考慮到從頭實現乙個大頂堆比較麻煩,這裡使用treeset容器,它提供有序的set。treeset底層實際使用的是treemap,而treemap是用紅黑樹實現的,在紅黑樹中查詢插入和刪除都只要o(logk)。

code:

//查詢a中前k小的元素

public void getleastnumbers(int a,int k)}}

while (!set.isempty())

system.out.println(set.pollfirst());

}

找出陣列中最小的k個數

leetcode 面試題40.最小的k個數 快速排序,時間複雜度為nlogn,然後前k個元素就是最小的k個數 class solution 原理也是快速排序的原理,只不過增加了停止條件。不用完全排序而已。class solution int label quicksort arr,0,arr.len...

無序陣列中最小的k個數

對於乙個無序陣列,陣列中元素為互不相同的整數,請返回其中最小的k個數,順序與原陣列中元素順序一致。給定乙個整數陣列a及它的大小n,同時給定k,請返回其中最小的k個數。測試樣例 1,2,4,3 4,2返回 1,2 簡單題 coding utf 8 class kthnumbers def findkt...

查詢n個數中最小的k個元素

求n個數中最小的k個元素 n很大,k相對較小 建立乙個k個元素的堆 再逐個插入,最壞情況時間複雜度為o nlgk include 求左右葉子 父結點的巨集定義 define left i i 2 define right i i 2 1 define parent i i 2 維持堆的性質 演算法原...