#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
class Solution {
public:
struct node {
int x, y;
node(int a, int b) {
x = a; y = b;
}
bool operator<(const node&b)const {
if (y == b.y) return x < b.x;
return y > b.y;
}
bool operator>(const node&b)const {
if (y == b.y) return x > b.x;
return y < b.y;
}
};
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int>mp;
for (int i = 0; i < nums.size(); i++) {
mp[nums[i]]++;
}
vector<node>q;
for (auto &it : mp) {
q.push_back(node(it.first, it.second));
}
sort(q.begin(),q.end());
vector<int>ans;
vector<node>::iterator iter = q.begin();
for (int i = 0 ; i < k; i++) {
ans.push_back((*iter++).x);
}
return ans;
}
};
int main() {
vector<int> nums{ 4,1,-1,2,-1,2,3};
vector<int> res;
Solution s1;
res = s1.topKFrequent(nums, 3);
vector<int>::iterator iter = res.begin();
for (; iter != res.end(); iter++) {
cout << *iter;
}
system("pause");
return 0;
}
- 通过unordered_map存储元素及其对应频数
- 重载运算符,对unordered_map转化的vector进行排序,注意要考虑y==b.y的情况
- for (auto &it : mp) 为C++11新特性