前K个高频元素 (掌握程度:低) [面试未做出]#
想到是桶排序了,但是具体的部分未实现出来,然后面试官还不知道这个解法,下去还是得重点看一下
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> cnt;
int maxCnt = 0;
for (int x : nums) {
cnt[x]++;
maxCnt = max(maxCnt, cnt[x]);
}
vector<vector<int>> buckets(maxCnt + 1);
for (auto& [x, count] : cnt) {
buckets[count].push_back(x);
}
vector<int> ans;
for (int i = maxCnt; i >= 0 && ans.size() < k; i--) {
for (int num : buckets[i]) {
ans.push_back(num);
if (ans.size() == k) break;
}
}
return ans;
}
};func topKFrequent(words []string, k int) []int {
feq := map[string]int{}
maxCnt := 0
for _, word := range words {
feq[word]++
maxCnt = max(maxCnt, feq[word])
}
buckets := make([][]string, maxCnt + 1)
for word, cnt := range feq {
buckets[cnt] = append(buckets[cnt], word)
}
res := []string{}
for i := maxCnt; i >= 0 && len(res) < k; i-- {
for _, word := range buckets[i] {
res = append(res, word)
if len(res) == k {
break
}
}
}
return res;
}
