- 题目:
- 思路
首先想到的是哈希表,用unordered_map存储每个元素出现的次数,再对次数进行排序,最后找到前k多个出现的元素即可。
代码:
class Solution { public: static bool cmp(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> map; for (int num : nums) { map[num]++; } vector<pair<int, int>> vec(map.begin(), map.end()); sort(vec.begin(), vec.end(), cmp); vector<int> result; for (int i = 0; i < k; i++) { result.push_back(vec[i].first); } return result; } };
首先将nums中的元素以及其出现的次数放入unordered_map中,然后unordered_map中的元素根据value值进行排序,最后输出前k个。
- 注意
1.比较的函数前面需要加上static
static bool cmp(const pair<int, int> &lhs, const pair<int, int> &rhs) { return lhs.second > rhs.second; }
2.unordered_map本身不能对value值进行排序,需要将其装换成vector再进行排序操作,代码如下
vector<pair<int, int>> vec(map.begin(), map.end());
- 说明
被代码未优化,但优点在于比较清晰