思路:可採用大頂堆來實現——維護乙個規模為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 維持堆的性質 演算法原...