力扣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;
    }
};
相关推荐
im_AMBER13 小时前
hello算法笔记 02
笔记·算法
Michelle802313 小时前
决策树习题
算法·决策树·机器学习
hn小菜鸡13 小时前
LeetCode 2540.最小公共值
数据结构·算法·leetcode
Tisfy13 小时前
LeetCode 0611.有效三角形的个数:双指针
算法·leetcode·题解·双指针
Keying,,,,13 小时前
力扣hot100 | 多维动态规划 | 62. 不同路径、64. 最小路径和、5. 最长回文子串、1143. 最长公共子序列、72. 编辑距离
算法·leetcode·动态规划
lifallen13 小时前
Flink Watermark机制解析
大数据·算法·flink
IT古董13 小时前
【第五章:计算机视觉-项目实战之目标检测实战】1.目标检测算法理论-(6)一阶段目标检测算法YOLO系列思想详解:YOLOV1~YOLOV10
算法·目标检测·计算机视觉
小旺不正经13 小时前
数据库表实现账号池管理
数据库·后端·算法
要做朋鱼燕14 小时前
ARM CoreSight:多核SoC调试追踪架构解析
开发语言·笔记·职场和发展·嵌入式·嵌入式软件
豆芽81914 小时前
模糊控制Fuzzy Control
人工智能·算法·模糊控制