最小的k個數

題目描述

輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

思路

  1. 此問題屬于TopK問題,題目中要求取最小的數,所以是建立大根堆。

2.可以借助java原生的優(yōu)先級隊列,底層就是按照建堆思想實現的。

Java代碼實現

import java.util.*;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        if(k>input.length || k==0){
            return new ArrayList<>();
        }
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(k,(o1,o2)->(o2-o1));

        for (int i = 0; i <input.length; i++) {
            if(priorityQueue.size()<k){
                priorityQueue.add(input[i]);
            }else{
                if(priorityQueue.peek()>input[i]){
                    priorityQueue.poll();
                    priorityQueue.add(input[i]);
                }
            }
        }
        return new ArrayList<>(priorityQueue);
    }

}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 眾所周知,《劍指offer》是一本“好書”。 為什么這么說? 因為在面試老鳥眼里,它里面羅列的算法題在面試中...
    蠻三刀醬閱讀 770評論 0 0
  • 題目40:最小的k個數 輸入n個整數,找出其中最小的k個數。 舉例說明 例如輸入4 、5 、1、6、2、7、3 、...
    stoneyang94閱讀 586評論 0 0
  • 題目 輸入n個數,找出其中最小的k個數。例如:輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、...
    Longshihua閱讀 474評論 0 2
  • 題目描述 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是...
    jackmxp閱讀 199評論 0 0
  • 本系列導航:劍指offer(第二版)java實現導航帖 面試題40:最小的k個數 題目要求:找出n個整數中最小的k...
    ryderchan閱讀 1,711評論 0 0

友情鏈接更多精彩內容