[LeetCode]347. Top K Frequent Elements(map排序)

来源:互联网 发布:身材知乎 编辑:程序博客网 时间:2024/05/16 11:45

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.
思路:首先插入map表,然后对map中key值进行排序,取出前k个。掌握知识点:对map中key值进行排序
#include<iostream>#include<map>#include<vector>#include<algorithm>using namespace std;typedef pair<int, int> PAIR;int cmp(const PAIR &x, const PAIR &y){return x.second > y.second;}vector<int> topKFrequent(vector<int>& nums, int k) {        map<int,int> hash;         vector<int> res;        map<int,int>pair_vec;         int len=nums.size();        for(int i=0;i<len;i++){hash[nums[i]]++;} map<int, int>::iterator iter; vector<PAIR>scoreVector; for(iter=hash.begin(); iter!=hash.end();iter++)      scoreVector.push_back(*iter);   sort(scoreVector.begin(), scoreVector.end(), cmp);  for(int i=0;i<k;i++)  {  res.push_back(scoreVector[i].first);  }  return res;        }int main(){vector<int> numbers;numbers.push_back(1);numbers.push_back(3);numbers.push_back(2);numbers.push_back(1);numbers.push_back(1);numbers.push_back(2);numbers.push_back(2);numbers.push_back(2);numbers= topKFrequent(numbers,2);for(int i=0;i<numbers.size();i++)cout<<numbers[i]<<'\0';}


0 0
原创粉丝点击