有乙個面試題,100w個數中找到最大的100個數。
解決方式是,用乙個100個容量的最小堆, 這100個數總數目前已知的最大的100個,而且
堆頂是小的, 在繼續遍歷時候,只和堆定比較, 如果這個數,比堆頂的大, 就把這個數加入
這個堆。
當遍歷完成後,這個最小堆中的數,就是最大的100個數了。
當理解了這個, 我還有乙個疑惑, 什麼是最小堆。
學習了這個篇帖子。 受益匪淺。 文章寫的很好, 一開始很難理解,跟著模擬了一下,
關鍵是要自己模擬程式,去移動一下 這個樹,才理解。
typedef struct heap heap;
struct heap ;
void insert(heap *h,int n)else
}h->arr[0] = n;
}void delete(heap *h)else
}}
下面這個是我自己改的,上面的是 wikipedia上copy的
#include
typedef struct heap heap;
struct heap
;//將數字num 插入 最小堆
//游標 比 位置 小一
void insert(heap *h, int num)
else
}
h->arr[0] = num;
}void c_delete(heap *h)
if(h->arr[i] > h->arr[i+1])
i++;
else
}}int main()
最小堆建立
題目 實現最小堆兩個功能 1 增加乙個元素 2 輸出並刪除最小堆中的最小的數 輸入 第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。每次操作首先輸入乙個整數type。當type 1,增添操作,接著輸入乙個整數u,代表要插入的元素。當type 2,輸出...
用priority queue建立最小堆
標準庫里的priority queue預設建立的是最大堆,要建立最小堆的話,需要下面的形式。1 priority queue,greater minheap 最小堆2 priority queue,less maxheap 最大堆預設的就是最大堆,可以直接像下面那樣寫 priority queue ...
matlab建立最小堆演算法實現
最小堆是一顆完全二叉樹,他的每乙個節點的值不大於其左右子節點的值。leaf name a b c d e f g h leaf data 10,1,1,11,1,1,8,5 my heap heap my heap.min heap create leaf name,leaf data 函式定義如下...