Leetcode 347. Top K Frequent Elements

来源:互联网 发布:mysql 解析json字符串 编辑:程序博客网 时间:2024/05/21 14:58
typedef pair<int, int> PAIR;  class Solution {public:    static int cmp(const PAIR &x, const PAIR &y)      {          return x.second > y.second;      }    vector<int> topKFrequent(vector<int>& nums, int k) {        map<int,int> map_verb;        vector<PAIR> pair_vec;        vector<int> result;        int nums_len = nums.size();        for(int i = 0; i < nums_len; i++)        {            if(map_verb.count(nums[i]) != 0)            {                map_verb[nums[i]]++;            }            else            {                map_verb[nums[i]] = 1;            }        }        for (map<int, int>::iterator map_iter = map_verb.begin(); map_iter != map_verb.end(); ++map_iter)          {              pair_vec.push_back(make_pair(map_iter->first, map_iter->second));          }        sort(pair_vec.begin(), pair_vec.end(), cmp);          int result_num = 0;        for (vector<PAIR>::iterator curr = pair_vec.begin(); curr != pair_vec.end(); ++curr)          {              result.push_back(curr->first);            result_num++;            if(result_num >= k)                break;        }          return result;    }};

更简单的方法就是:

class Solution {public:    vector<int> topKFrequent(vector<int>& nums, int k) {        unordered_map<int,int> map;        for(int num : nums){            map[num]++;        }        vector<int> res;        priority_queue<pair<int,int>> pq;         for(auto it = map.begin(); it != map.end(); it++){            pq.push(make_pair(it->second, it->first));            if(pq.size() > (int)map.size() - k){                res.push_back(pq.top().second);                pq.pop();            }        }        return res;    }};
0 0
原创粉丝点击