
1. 思路
难点在于把时间复杂度降低到O(nlogn),考虑使用unordered map,先统计所有数出现的概率,再把unordered map reverse一下,得到每个频数对应的原整数。
2.AC代码( 16 ms, faster than 96.39% of C++)
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> map;
unordered_map<int, vector<int>> map_reverse;
for(int i=0; i<nums.size(); i++){
if(map.count(nums[i])) map[nums[i]] += 1;
else map[nums[i]] = 1;
}
for(auto i: map){
map_reverse[i.second].push_back(i.first);
}
vector<int> res;
for(int i=nums.size(); i>=1; i--){
if(map_reverse.count(i)) res.insert(res.end(), map_reverse[i].begin(), map_reverse[i].end());
if(res.size() == k) return res;
}
return res;
}
};
博客围绕LeetCode题目展开,解题难点是将时间复杂度降至O(nlogn)。采用unordered map统计所有数出现概率,再将其反转得到每个频数对应的原整数,还给出了运行时间为16ms、超越96.39% C++代码的AC代码。
3454

被折叠的 条评论
为什么被折叠?



