用PriorityQueue解決選擇最小的K個數問題
Java沒有堆的實現,現場寫也來不及,有的文獻說用TreeSet,比如劍指offer,但是TreeSet是一個set,相同的數只能存一個,個人感覺不合適,相比之下,Java中的PriorityQueue倒是一個不錯的選擇。用PriorityQueue的實現的程式碼如下:
/**
* 用PriorityQueue實現選擇最小的k個數
* @param array 陣列
* @param k
* @return
*/
public int[] selectKmin(int[] array,int k){
int[] res = new int[k];
//建立一個降序排列的PriorityQueue,自定義比較器作為引數
PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>(k,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}});
for(int i=0;i<array.length;i++){
if(priorityQueue.size()<k){
priorityQueue.add(array[i]);
}else{
int maxInQueue = priorityQueue.peek();
if(maxInQueue>array[i]){//每次取數與堆頂的元素進行比較,
//如果堆頂元素大,則刪除堆頂元素,並新增這個新數到堆中
priorityQueue.poll();
priorityQueue.add(array[i]);
}
}
}
//升序存放
for(int i=0;i<k;i++){
res[k-i-1] = priorityQueue.poll();
}
return res;
}
相關文章
- 選擇問題(求第k個最小元素)
- [每日一題] 第二十題:最小的k個數每日一題
- 流量卡哪個最划算?解決流量卡選擇問題
- 求最小k個數
- 用Python解決一個等差數列的求和問題Python
- JZ-029-最小的 K 個數
- 每日一練(21):最小的k個數
- 劍指Offer-31-最小的K個數
- amazeUI復擇框問題解決UI
- Windows 10升級無法選擇保留個人檔案、設定問題解決Windows
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 找到無序陣列中最小的k個數陣列
- 選擇正確DevSecOps解決方案的七個技巧dev
- 這就是選擇排序的問題排序
- 9 個技巧,解決 K8s 中的日誌輸出問題K8S
- LeetCode題解:劍指 Offer 40. 最小的k個數,二叉堆,JavaScript,詳細註釋LeetCodeJavaScript
- 8 種方案解決重複提交問題!你選擇哪一種呀?
- 卷積核大小選擇、網路層數問題卷積
- 劍指offer:輸入n個整數,找出其中最小的K個數。
- 【爬坑日記】.class.class選擇器的選擇問題
- 選擇 NoSQL 資料庫需要考慮的 10 個問題SQL資料庫
- elementui el-select多選進行初始化後,重新選擇選不上問題完美解決。UI
- java解決數字黑洞問題Java
- Angular應用解決跨域訪問的問題Angular跨域
- 關於解決問題的幾個段位
- 圖:310.最小高度數, 題解
- 用STAR模式來解決問題模式
- 政府OA系統選擇時要考慮的六個問題
- Vue動態構建混合資料Treeselect選擇樹及巨樹問題的解決方法Vue
- 選擇一款好用的營銷專案管理可以更好幫您解決任何問題專案管理
- 解決k8s排程不均衡問題K8S
- MySQL 你可能忽視的選擇問題MySql
- EditText選擇模式的一些問題模式
- 如何選擇一個Kafka叢集中的主題分割槽的數量Kafka
- 【數學問題】最大公約數與最小公倍數
- 最小的 k 個元素--快排變形
- maven的pom.xml用解決版本問題MavenXML
- ubuntu下解決埠被佔用的問題Ubuntu