力扣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;
    }
};
相关推荐
搞科研的小刘选手9 小时前
【智能计算方向专题研讨会】第三届智能计算与数据分析国际学术会议(ICDA 2026)
大数据·算法·机器学习·数据挖掘·数据分析·可视化·计算
量化君也9 小时前
桥水基金全天候策略拆解,构建中国ETF躺平版策略
大数据·人工智能·python·算法·金融·业界资讯
蓦然回首却已人去楼空9 小时前
画图专用文档
算法
洛水水9 小时前
【力扣100题】78.在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
江屿风9 小时前
C++图论基础拓扑排序算法流食般投喂
开发语言·c++·笔记·算法·排序算法
海棠AI实验室9 小时前
AI 时代文献综述:从检索到成稿的 RAG 五步法
windows·算法·自动化·llm·rag
H178535090969 小时前
SolidWorks_基于草图的实体特征14_扫描扭转与控制
前端·人工智能·算法·3d建模·solidworks
黄金龙PLUS9 小时前
基于ARX结构的新型序列密码算法FlashLight
算法·网络安全·密码学·哈希算法·同态加密
洛水水9 小时前
【力扣100题】77.搜索二维矩阵
算法·leetcode·矩阵
仙俊红10 小时前
深入理解 ThreadLocal —— 从变量引用、强弱引用到 Spring Boot 实战
spring boot·python·算法