zoukankan      html  css  js  c++  java
  • 347. Top K Frequent Elements

    class Solution {
    public:
        vector<int> topKFrequent(vector<int>& nums, int k) {
            unordered_map<int,int> count;
            for(int i=0;i<nums.size();++i)
                ++count[nums[i]];
            vector<vector<int>> bucket(nums.size()+1,vector<int>());
            for(auto i=count.begin();i!=count.end();++i)
                bucket[i->second].push_back(i->first);
            vector<int> r;
            for(int i=nums.size();i>=0&&r.size()<k;--i)
                r.insert(r.end(),bucket[i].begin(),bucket[i].end());
            return r;
        }
    };

    1

    要求算法复杂度比  O(n log n) 要好, 这就有点难了...  首先本来看题还挺简单, 不就是hash搞定, 结果看到最后 来个时间复杂度要求. 歇菜了

    2

    直接看答案了, discuss区第一名的答案直接就是On 的效率, 我只能说... 这帮人怎么这么聪明, 我怎么这么蠢

    3

    基本原理是先用hash做一个数字的次数统计, 这样得到一个结果比如说 1出现1次, 3出现2次, 5出现2次;  

    接下来用一个vector<vector<int>>来遍历,  这个结构有两层vector,   v[i] 表示 出现了i次的数字集合; 按照上面的例子就是   v[1]={1} ,  v[2]={3,5}

    4

    好了, 由于索引本身就代表了出现频率,  也就省掉了排序; 从最大的索引,直接遍历一遍就搞定

  • 相关阅读:
    计算机学院大学生程序设计竞赛(2015’12)Study Words
    离散化
    一键拨打
    python中Strip()函数的用法
    笨方法学python 22,前期知识点总结
    笨方法学python之读写文件、open函数的用法
    Linux 多线程串口通信
    RSA加密前言
    GrabCut--Opencv篇
    队列
  • 原文地址:https://www.cnblogs.com/lychnis/p/9266119.html
Copyright © 2011-2022 走看看