• 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进行排列。

  • 相关阅读:
    .net的委托和事件的直接理解[转载]
    虚函数 多态 函数重载[转载]
    自动化 object <> xml
    用System.Web.HttpRequest模拟一个form的post
    【WP7】动画的使用
    【WP7】关于ListBox控件的数据绑定
    【WP7】坐标变换
    【WP7】页面之间数据交互
    【WP7】调用系统LED灯
    【WP7】MediaPlayer与关闭音乐的方法
  • 原文地址:https://www.cnblogs.com/rookiez/p/13334865.html
Copyright © 2020-2023  润新知