题解 | #【模板】哈夫曼编码#

【模板】哈夫曼编码

https://www.nowcoder.com/practice/4c0419eb07c840ca8402e4f2a52cfd49

使用最小堆来解决,构建哈夫曼树

从优先队列中取出两个最小的频率 合并成一个新的结点

将新的节点重新插入堆中

重复n - 1次 直到堆中只剩下1个节点为止

#include<iostream>
#include<queue>
#include<vector>
using namespace std;


int main() {
    int n;
    cin >> n;
    priority_queue<long long, vector<long long>,greater<>> heap;
    for(int i = 0; i < n; i ++){
        int cnt;
        cin >> cnt;
        heap.push(cnt);
    }
    long long minLength = 0;
    while(heap.size() > 1){
        long long first = heap.top();
        heap.pop();
        long long second = heap.top();
        heap.pop();

        long long sum = first + second;
        minLength += sum;
        heap.push(sum);
    }
    cout << minLength << endl;
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务