LeetCode——前K个高频元素(桶排序)

桶排序方法

vector topKFrequent(vector& nums, int k) {
    // 用哈希map记录每个数字出现的次数
    unordered_map hashmap;
    vector result;
    int maxCount = 0;
    for (int i = 0; i < nums.size(); i++){
        hashmap[nums[i]]++;
        maxCount = max(maxCount, hashmap[nums[i]]);
    }       
    // 采用桶排序,对次数进行排序
    // 桶的数量
    int bucketCount = maxCount + 1;
    vector> buckets(bucketCount);
    for (auto it : hashmap){
        buckets[it.second].push_back(it.first);
    }
    for (int i = buckets.size() - 1; i >= 0; i--){
        if (!buckets[i].empty()){
            for (auto num : buckets[i]){
                result.push_back(num);
                if (result.size() == k){
                    return result;
                }
            }
        }
    }

    return result;
}

你可能感兴趣的:(LeetCode)