用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個最小元素)
- ListView Item 選擇問題解決之道View
- [每日一題] 第二十題:最小的k個數每日一題
- 選擇問題——選取第K小元素
- 流量卡哪個最划算?解決流量卡選擇問題
- multidex解決65k方法數問題IDE
- 用Python解決一個等差數列的求和問題Python
- 找最小的k個數(優先佇列)佇列
- k個最小和;及數對數目分析
- 找到無序陣列中最小的k個數陣列
- amazeUI復擇框問題解決UI
- 這就是選擇排序的問題排序
- 關於設定選擇條顏色多個ListView之間切換問題解決方案View
- 今天解決的兩個問題
- 9 個技巧,解決 K8s 中的日誌輸出問題K8S
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 卷積核大小選擇、網路層數問題卷積
- 8 種方案解決重複提交問題!你選擇哪一種呀?
- 【爬坑日記】.class.class選擇器的選擇問題
- 選擇 NoSQL 資料庫需要考慮的 10 個問題SQL資料庫
- 一個小問題的解決方案
- 解決了一個PC的問題
- 用簡單的方法解決問題
- LeetCode題解:劍指 Offer 40. 最小的k個數,二叉堆,JavaScript,詳細註釋LeetCodeJavaScript
- 面試中常問的有關隨機選取k個數的總結面試隨機
- 特徵選擇(一)-維數問題與類內距離特徵
- [轉]解決系統CPU個數識別不正確的問題
- 選擇正確DevSecOps解決方案的七個技巧dev
- java解決數字黑洞問題Java
- 解決「問題」,不要解決問題
- Windows 10升級無法選擇保留個人檔案、設定問題解決Windows
- "開啟方式"--"選擇程式" 被拒絕訪問 的解決方法!
- elementui el-select多選進行初始化後,重新選擇選不上問題完美解決。UI
- 如何選擇一個Kafka叢集中的主題分割槽的數量Kafka
- 政府OA系統選擇時要考慮的六個問題
- 最小的 k 個元素--快排變形
- 解決k8s排程不均衡問題K8S
- MySQL 你可能忽視的選擇問題MySql