• LeetCode347 前k个高频元素


    给定一个非空的整数数组,返回其中出现频率前 高的元素。

    用最小堆解决。先用map记录每个元素的出现次数,然后循环往最小堆中压入,如果堆中节点数量大于k了就弹出堆顶。

     1 class Solution {
     2 public:
     3     vector<int> topKFrequent(vector<int>& nums, int k) {
     4         unordered_map<int,int> map;
     5         for(int i : nums) map[i] ++; //遍历
     6         priority_queue< pair<int,int>, vector< pair<int,int> >, greater< pair<int,int> > > q; //最小堆
     7         for(auto it : map) 
     8             if(q.size() == k) { //队列满了
     9                 if(it.second > q.top().first) { //堆排
    10                     q.pop();
    11                     q.push(make_pair(it.second, it.first));
    12                 }
    13             }
    14             else q.push(make_pair(it.second, it.first));
    15         vector<int> res;
    16         while(q.size()) { //将优先队列中k个高频元素存入vector
    17             res.push_back(q.top().second);
    18             q.pop();
    19         }
    20         return vector<int>(res.rbegin(), res.rend());
    21     }
    22 };
    23 
    24 作者:OrangeMan
    25 链接:https://leetcode-cn.com/problems/top-k-frequent-elements/solution/cjian-ji-dai-ma-by-orangeman-5/
    26 来源:力扣(LeetCode)
    27 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    这里压入堆中的时候需要反过来压入<second,first>,应该是因为优先队列会根据里面的pair的first进行排列。

  • 相关阅读:
    没有spring如何使用注解下篇
    在没有spring框架如何使用注解上篇
    oracle11g里sqldeveloper不能打开的问题
    java代码换行
    枚举接口Enumeration
    java开发环境的搭建(上班笔记01)
    2013.12.12-2013.12.22面试
    2013.12.12-2013.12.20面试
    supervisor superlance
    Laravel 返回日期问题2021-07-23T05:56:03.000000Z
  • 原文地址:https://www.cnblogs.com/rookiez/p/13334865.html
Copyright © 2020-2023  润新知