用固定大小的堆查詢Top N個元素

2021-05-25 07:04:42 字數 360 閱讀 8963

輸入一串行的整數(共n個),找出前十個元素(top 10)。可以用heap實現:在堆滿時,如果要插入乙個新的元素,則需比較該元素是不是當前堆中最小的元素,如果不是,則需要將該新元素替換最小的元素,從而維護乙個top n的堆。通常最小的元素查詢需要線性時間,因為只需要查詢葉子節點(這是由堆的ordering property決定的),而葉子節點個數最多為2^o([logn] ) = o(n),所以查詢最小元的總開銷為o(n),然後需要重新構建堆,其總開銷為o(nlogn), 二者加起來總的時間複雜度為o(nlogn), 空間開銷為o(1)。顯然比通過排序查詢top n的空間複雜度要低得多!

實現:

測試輸出:

78 66 20 13 9 6 4 3 2 1

用陣列結構實現大小固定的棧

棧結構是 後進先出 有初始化棧 入棧 出棧 返回棧頂等功能 1.初始化棧 給定乙個初始大小,建立乙個棧。2.定義乙個變數 index,初始化為 0,用來記錄棧中的元素數量。3.入棧 如果 index小於棧的大小,將要入棧的數放入陣列的 index位置上,index加 1。否則報錯。4.出棧 如果 i...

用陣列結構實現大小固定的佇列和棧

題目 用陣列結構實現大小固定的佇列和棧 分析 如果強行限制給出乙個長度為n的陣列,設計乙個大小為n的棧,如果超過這個大小,可以報錯。棧 先進後出 佇列 先進先出 public class array to stack queue arr new integer initsize size 0 pub...

用陣列結構實現大小固定的佇列和棧

public static class arraystack array newinteger initsize size 0 檢視棧頂元素 public integer peek return array size 1 壓棧 public void push int num array size ...