Top K Frequent Elements=-leetcode

来源:互联网 发布:淘宝卖家需求 编辑:程序博客网 时间:2024/05/29 15:36

题目

Given a non-empty array of integers, return the k most frequent elements.

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

Note:
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.
Subscribe to see which companies asked this question

具体题目见网址https://leetcode.com/problems/top-k-frequent-elements/

代码一

class Solution {public:    vector<int> topKFrequent(vector<int>& nums, int k) {        unordered_map<int, int> count;        for(vector<int>::iterator it=nums.begin();it!=nums.end();++it)            ++count[*it];            multimap<int,int,greater<int>> VecSort;            for( unordered_map<int, int>::iterator  it=count.begin();it!=count.end();++it)            {                 VecSort.insert(pair<int, int>((it->second), it->first));            }            vector<int> result(k,0);            multimap<int,int>::iterator it=VecSort.begin();              for (int i = 0; i <k; ++i,++it) {                 result[i]=it->second;    }          return result;    }};

代码二

class Solution {public:static bool cmp_by_value(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> count;        for(vector<int>::iterator it=nums.begin();it!=nums.end();++it)            ++count[*it];    vector<pair<int,int> > name_score_vec(count.begin(), count.end());    sort(name_score_vec.begin(), name_score_vec.end(), cmp_by_value);    vector<int>  result(k,0);  for (int i = 0; i <k; ++i) {       result[i]=name_score_vec[i].first;    }          return result;    }};
2 0
原创粉丝点击