力扣hot100——347.前K个高频元素(cpp手撕堆)

题目链接: 347. 前 K 个高频元素 - 力扣(LeetCode)

cpp版手撕堆

cpp 复制代码
class Solution {
public:
    // 向下调整堆(最小堆)
    void shiftDown(vector<pair<int, int>>& heap, int index,int len) {
        int parent = index;
        int child = 2 * parent + 1;
        while (child < len) {
            if (child + 1 < len && heap[child + 1].second < heap[child].second) {
                child++;
            }
            if (heap[parent].second > heap[child].second) {
                swap(heap[parent], heap[child]);
                parent = child;
                child = 2 * parent + 1;
            } else {
                break;
            }
        }
    }
    vector<int> topKFrequent(vector<int>& nums, int k) {
        // 统计每个数字出现的频率
        unordered_map<int, int> freqMap;
        for (int num : nums) {
            freqMap[num]++;
        }
        // 初始化堆,放入前 k 个元素
        vector<pair<int, int>> minHeap;
        for (const auto& entry : freqMap) {
            if (minHeap.size() < k) {
                minHeap.push_back(entry);
            }
        }
        // 构造一个合法的最小堆
        for (int i = minHeap.size() / 2 - 1; i >= 0; i--) {
            shiftDown(minHeap, i,k);
        }
        // 处理剩下的元素
        int processedCount = 0;
        for (const auto& entry : freqMap) {
            if (processedCount < k || entry.second <= minHeap[0].second) {
                processedCount++;
                continue;
            }
            minHeap[0] = entry;
            shiftDown(minHeap, 0,k);
        }
        // 提取结果
        vector<int> result;
        for (const auto& p : minHeap) {
            result.push_back(p.first);
        }
        return result;
    }
};
相关推荐
mmmmath_3几秒前
LeetCode.028.找出字符串中第一个匹配项的
数据结构·算法·leetcode
Selvaggia11 分钟前
DMD(Distribution Matching Distillation,分布匹配蒸馏)
算法
Navigator_Z27 分钟前
LeetCode //C - 1255. Maximum Score Words Formed by Letters
c语言·算法·leetcode
All for pursuit.31 分钟前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
开开心心就好1 小时前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
All for pursuit.1 小时前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
wzdark1 小时前
数据压缩算法的时间复杂度与压缩率权衡4
算法
yuanxi2001 小时前
卡塔尔能源公司LNG扩建项目首条生产线预计明年投运:大客户销售的5个判断
职场和发展·创业创新·学习方法
小陈phd1 小时前
深入理解agent学习笔记(一)——现代agent介绍
人工智能·算法
圣保罗的大教堂2 小时前
leetcode 1665. 完成所有任务的最少初始能量 中等
leetcode