栈与队列|347.前k个高频元素

力扣题目链接

class Solution {
public:
    // 小顶堆
    class mycomparison {
    public:
        bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs) {
            return lhs.second > rhs.second;
        }
    };
    vector<int> topKFrequent(vector<int>& nums, int k) {
        // 要统计元素出现频率
        unordered_map<int, int> map; // map<nums[i],对应出现的次数>
        for (int i = 0; i < nums.size(); i++) {
            map[nums[i]]++;
        }

        // 对频率排序
        // 定义一个小顶堆,大小为k
        priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pri_que;

        // 用固定大小为k的小顶堆,扫面所有频率的数值
        for (unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++) {
            pri_que.push(*it);
            if (pri_que.size() > k) { // 如果堆的大小大于了K,则队列弹出,保证堆的大小一直为k
                pri_que.pop();
            }
        }

        // 找出前K个高频元素,因为小顶堆先弹出的是最小的,所以倒序来输出到数组
        vector<int> result(k);
        for (int i = k - 1; i >= 0; i--) {
            result[i] = pri_que.top().first;
            pri_que.pop();
        }
        return result;

    }
};

这题涉及的知识点比较多,所以一时难以理解。

一、出错点

1.不理解要用小顶堆干什么

2.sorry这题我毫无思绪

二、理解后的思路

1.从小到大排就是小顶堆,从大到小排就是大顶堆。

代码随想录 (programmercarl.com)

这道题目主要涉及到如下三块内容:

  1. 要统计元素出现频率
  2. 对频率排序
  3. 找出前K个高频元素

首先统计元素出现的频率,这一类的问题可以使用map来进行统计。

然后是对频率进行排序,这里我们可以使用一种 容器适配器就是优先级队列

三、总结

学习大顶堆、小顶堆的知识点。还有之前出现和用过很多次的map

难呜呜呜,常回来看看,学通知识点~

相关推荐

  1. 队列|347.k高频元素

    2024-03-18 02:18:05       23 阅读
  2. 347. K 高频元素

    2024-03-18 02:18:05       30 阅读
  3. 347. K 高频元素

    2024-03-18 02:18:05       33 阅读
  4. 347k高频元素

    2024-03-18 02:18:05       20 阅读
  5. Leetcode 347K高频元素

    2024-03-18 02:18:05       13 阅读
  6. 力扣 | 347. K 高频元素

    2024-03-18 02:18:05       35 阅读
  7. LeetCode Hot100 347.k高频元素

    2024-03-18 02:18:05       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 02:18:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 02:18:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 02:18:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 02:18:05       20 阅读

热门阅读

  1. MIT 6.5840-分布式系统学习记录

    2024-03-18 02:18:05       19 阅读
  2. OpenMP 并行构造

    2024-03-18 02:18:05       17 阅读
  3. UE4 虚幻4快捷键教程

    2024-03-18 02:18:05       18 阅读
  4. LeetCode 567. 字符串的排列

    2024-03-18 02:18:05       22 阅读
  5. P1807 最长路题解

    2024-03-18 02:18:05       23 阅读