347. Top K Frequent Elements

it2022-05-09  37

题目:

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存储元素,key值为元素,value为该元素对应的个数。用vector存储元素及其对应的个数。使用sort对vector进行排序,并重写自定义函数cmp。将前k位的key值存储在最终要返回的数组中。

代码:

bool cmp(const pair<int, int> &x, const pair<int, int> &y) { return x.second > y.second; } class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { map<int, int> m; map<int, int>::iterator it_m; vector<pair<int, int> > v; vector<int> result; for (int i = 0; i < (signed) nums.size(); i++) { m[nums[i]]++; } for (it_m = m.begin(); it_m != m.end(); it_m++) { v.push_back(make_pair(it_m->first, it_m->second)); } sort(v.begin(), v.end(), cmp); for (int i = 0; i < k; i++) { result.push_back(v[i].first); } return result; } };

 

转载于:https://www.cnblogs.com/sindy/p/6933612.html

相关资源:数据结构—成绩单生成器

最新回复(0)