我是靠谱客的博主 粗暴大神,最近开发中收集的这篇文章主要介绍【leetcode】【剑指offer Ⅱ】060. 出现频率最高的 k 个数字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述:

  • 给定一个整数数组 nums 和一个整数 k,请返回其中出现频率前 k 高的元素。
    • 可以按任意顺序返回答案。

核心思路:

  • 该题需要用无序哈希表 + 优先队列来进行解题。
    • 首先用哈希表记录数组中元素的频数。
    • 记录完频数后将数值和频数存为 pair<int, int> 后存入优先队列中。【优先队列根据频数进行排序】
    • 同时优先队列的大小需要固定为 k,只要优先队列的大小大于 k 则弹出顶部。

代码实现:

class Solution
{
public:
    vector<int> topKFrequent(vector<int>& nums, int k)
    {
        unordered_map<int, int> mm;
        for(int num : nums) ++mm[num];
        using pii = pair<int, int>;
        auto cmp = [&](const pii& a, const pii& b)
        {
            return a.second > b.second;
        };
        priority_queue<pii, vector<pii>, decltype(cmp)> pq(cmp);
        for(auto& [num, cnt] : mm)
        {
            pq.emplace(num, cnt);
            if(pq.size() > k) pq.pop();
        }
        vector<int> ans;
        while(!pq.empty())
        {
            ans.emplace_back(pq.top().first);
            pq.pop();
        }
        return ans;
    }
};

最后

以上就是粗暴大神为你收集整理的【leetcode】【剑指offer Ⅱ】060. 出现频率最高的 k 个数字的全部内容,希望文章能够帮你解决【leetcode】【剑指offer Ⅱ】060. 出现频率最高的 k 个数字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部