链接
https://leetcode-cn.com/problems/top-k-frequent-elements/
耗时
解题:16 min
题解:3 min
题意
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
思路
由于必须优于 O ( n l o g n ) O(n log n) O(nlogn),所以不能直接排序。
另一种直观的思路,首先 O ( n ) O(n) O(n) 统计元素频率,然后对频率从大到小排序,返回前 k k k 个元素值即可。
时间复杂度: O ( m i n ( n , m l o g m ) ) O(min(n, mlogm)) O(min(n,mlogm)), m 是数组中不相同的元素的个数
AC代码
class Solution {
public:
struct num {
int val;
int fre;
bool operator < (const num &d) const {
return fre > d.fre;
}
};
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int, int> mp;
for(auto x : nums) {
mp[x]++;
}
vector<num> tmp;
for(auto x : mp) {
tmp.push_back((num){x.first, x.second});
}
sort(tmp.begin(), tmp.end());
vector<int> ans;
for(int i = 0; i < k; ++i) {
ans.push_back(tmp[i].val);
}
return ans;
}
};