力扣hot100——前k个高频元素 (优先队列法,相关总结文章见另一博客)

解题思路:

哈希表记录元素出现的次数,然后将哈希表元素加入优先队列(会自动根据比较原则去排列元素)

定义优先队列根据元素频率降序排列,然后直接取出前k个元素即可

cpp 复制代码
class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
    //1.map记录元素出现的次数
        unordered_map<int,int>map;//两个int分别是元素和出现的次数
        vector<int> res;
        for(auto& c:nums){
            map[c]++;
        }


        // 采用优先队列解决
        // 此题使用自定义比较
        struct compare{
            bool operator() (pair<int,int> & p1,pair<int,int> &p2){
                return p1.second > p2.second; // 大根堆,小根堆就是小于了
            }
        };
        // priority_queue<Type, Container, Functional>;
        priority_queue<pair<int,int>,vector<pair<int,int>>,compare> pq; // 定义优先队列

        //遍历map中的元素
        //1.管他是啥,先入队列,队列会自己排序将他放在合适的位置
        //2.若队列元素个数超过k,则将栈顶元素出栈(栈顶元素一定是最小的那个)
        for(auto &m : map){
            pq.push(m);
            if(pq.size() > k){
                pq.pop();
            }
        }

        while(!pq.empty()){
            res.emplace_back(pq.top().first);
            pq.pop();
        }


        return res;

    }
};

相关推荐
爱coding的橙子2 分钟前
每日算法刷题计划Day20 6.2:leetcode二分答案3道题,用时1h20min
算法·leetcode·职场和发展
子豪-中国机器人1 小时前
2025年5月18日蓝桥stema省选拔赛编程题答案解析
c++·算法·数学建模
极光雨雨1 小时前
【算法】回溯法
算法
君鼎1 小时前
排序算法——详解
数据结构·算法·排序算法
岁忧1 小时前
LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 上
数据库·sql·leetcode
Felven2 小时前
A. AvtoBus
算法
卫青~护驾!2 小时前
c++数据结构8——二叉树的性质
数据结构·算法
飞川撸码2 小时前
【LeetCode 热题100】BFS/DFS 实战:岛屿数量 & 腐烂的橘子(力扣200 / 994 )(Go语言版)
leetcode·深度优先·宽度优先
半桔2 小时前
【烧脑算法】不定长滑动窗口:从动态调整到精准匹配以灵活特性实现高效破题
数据结构·c++·算法·leetcode·面试·职场和发展·排序算法
不会敲代码的灵长类3 小时前
机器学习算法-逻辑回归
算法·机器学习·逻辑回归