前 K 个高频元素

347.前 K 个高频元素 本题属于统计元素频率并找出高频元素的问题。可以通过统计每个元素的出现频率,然后根据频率对元素进行排序,最终找出前。个高频元素,最后将堆中的元素存入结果数组并返回。这个代码首先统计每个元素的出现频率,然后使用最小堆来维护前。,请你返回其中出现频率前。347.前 K 个高频元素。 阅读详情

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

说明:

  • 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。

分析:

    关键是对这些数字进行统计,我使用map来进行数字出现次数的统计,对统计情况进行排序,最后得出结果。

    代码有点复杂,目前没想出对map更好的排序方法

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        // 计数,int1出现了int2次
        map<int,int> map_arr;
        // 使用map计数
        for(int num:nums)
            map_arr[num] ++;
        
        // 遍历读取计数次数
        vector<int> arr_count;        
        map<int,int>::iterator curr = map_arr.begin();
        while(curr != map_arr.end()){
            arr_count.push_back(curr->second);
            curr ++;
        }
        // 排序,找到第k个高频元素出现的次数
        sort(arr_count.begin(),arr_count.end());
        int num = arr_count[arr_count.size()-k];
        // 遍历map找到出现次数大于num的那个元素
        vector<int> result;
        curr = map_arr.begin();
        while(curr != map_arr.end()){
            if(curr->second >= num)
                result.push_back(curr->first);
            curr ++;
        }
        return result;
    }
};

 

前 K 个高频元素算法详解:思路、实现与优化 本文详细解析了求解“前 K 个高频元素”的高效算法。首先通过哈希表统计元素频率(O(n)),然后使用小根堆(O(m log k))筛选出Top K高频元素,整体复杂度远优于全排序。该方法兼具空间优化(仅维护k大小的堆)和时间效率(动态替换堆顶元素),适用于日志分析、热门统计等实际场景。文章还建议了极端场景下的优化方案(快速选择算法)和分布式扩展思路,提供了清晰的Java实现代码,帮助读者掌握这一经典算法问题的核心解法。 阅读详情

相关推荐

RTX 50系列显卡选购指南:从Stable Diffusion到深度学习,哪款最适合你的AI需求?

本文深入分析了RTX 50系列显卡如何满足不同的AI应用需求。针对Stable Diffusion图像生成,强调显存容量是关键;对于大语言模型本地推理,需平衡算力与显存;而深度学习训练则更看重算力效率。文章对比了RTX 5090、5080、5070等型号的核心规格与适用场景,并提供了从入门到专业的实战配置建议,帮助用户根据自身AI工作负载精准选择最具性价比的显卡。

linux6sysadmin的博客 689

347. 前 K 个高频元素

前 K 个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] public int[] topKFrequent(int[] nums, int k) { HashMap<Integer,Integer>map=new HashMap&l.

LHH的博客 198

企业微信-审批控件中的外部选项的应用全流程完美解决方案

完美解决企业微信所有JS-SDK调用问题 完美解决苹果和PC端不适配的问题

qq_45195039的博客 5866

【C语言刷LeetCode】347. 前 K 个高频元素(M)

【给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2:输入: nums = [1], k = 1 输出: [1] 提示:1 ...

kinbo88的专栏 508

LIN总线从入门到精通:低成本汽车通信协议原理与实战

在汽车电子和嵌入式系统中,串行通信协议是实现分布式控制的关键技术。其中,LIN(Local Interconnect Network)总线作为一种专为低成本应用设计的单主多从网络协议,其核心原理在于通过简化的“领导-汇报”通信模式,在满足车身控制、传感器数据采集等场景需求的同时,将硬件与布线成本降至最低。LIN总线采用标准化的帧结构,包含间隔场、同步场和受保护标识符场,并依赖调度表来管理通信时序,确保了网络的确定性与可靠性。其技术价值在于为车窗、座椅、灯光等非安全关键系统提供了高性价比的解决方案,是构建分层

weixin_29185167的博客 260

步进电机驱动算法——梯形加减速算法

目录步进电机梯形加减速梯形加减速算法原理分析算法实现 步进电机梯形加减速 电机的控制方式一般分为开环控制与闭环控制两种控制方式,其中开环控制原理框图如下: 这种种控制方式的特点是:控制简单、实现容易、价格较低,这种开环控制方式,负载位置对控制电路没有反馈。 对于步进电机,控制脉冲的输入并不依赖于转子的位置,而是按一固定的规律发出控制脉冲,如果励磁变化太快,电机不能移动到新的位置,那么实际负载位置与理想位置就会产生一个偏差,就有可能出现失步或者过冲现象,所以需要使用加减速算法。 梯形加减速算法,S加减速算法等

aaa376070331的博客 3万+

LeetCode-347-前K个高频元素-C语言

/* * 算法思想: * 构建带权值哈希表,权值为出现次数; * 1. 首先排序,方便构建哈希表,使相同的值相邻; * 2. 排序哈希表,以哈希表的权值出现次数为排序元素; * 3. 从哈希表中提取k个排序结果即可。 **/ int cmp(int *a, int *b){ return *a - *b; } int cmp_node(int *a, int *b){ ...

SFFS 1246

恭喜,恭喜,iMouse爱鼠XP版全面发布测试,苹果手机自动化测试必须

电脑控制苹果手机,免越狱,免签名,自动化测试

qq_41057894的博客 1063

Leetcode347. 前 K 个高频元素(C语言)

Leetcode347. 前 K 个高频元素(C语言) 算法-动态规划:算法与数据结构参考 题目: 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] 说明: 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相...

jeanlu的博客 971

【人工智能】《Deep Dive into LLMs like ChatGPT 》—— Andrej Karpathy 第三阶段:强化学习(Reinforcement Learning, RL)

摘要:强化学习(RL)阶段通过让模型自主生成并验证答案,突破SFT阶段的模仿局限,使其在数学、代码等领域形成独特的推理路径。RL流程包括批量生成解答、自动批改筛选正确路径,并采用PPO/GRPO算法优化模型。模型会自发涌现自我检查、回滚等策略,显著提升正确率(如AIME竞赛准确率从15%升至56%)。与SFT模型相比,RL模型具备主动链式思维、验算能力,响应时间更长但效果更优,形成真正的“思考模型”。三阶段对比显示,RL通过可验证题的对错奖励机制,赋予模型超越人类范式的推理能力。

奶爸的编程之路,也就一周冷个三天 149

华为od 面试八股文_Python_05_含答案

华为od 面试八股文_Python_05_含答案

MISAYAONE的博客 2558

347. 前 K 个高频元素-M

347. 前 K 个高频元素-M label : heap K、topK 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] 说明: 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法...

longtails的博客 481

C++多线程 task--std::promise和std::future

本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接

qls315的博客 1818

前k个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。

Yyyyyyyyyyyyds的博客 897

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode 前 K 个高频元素

这里写自定义目录标题LeetCode每日一题第一天解题思路代码参考 LeetCode每日一题第一天 **题目:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] 提示: 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。 题目数据

qq_45292119的博客 417

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

347-前 K 个高频元素

// 利用i 这个trick,记录了最大出现的频率值,然后逐渐减少i, 直到找到第二小的频率值, 但是这个方法适用于频率值差异比较小的情况,如果频率值差异很大, 那么会无用的遍历map很多遍,而找不到对应的频率值 class Solution { public: vector<int> topKFrequent(vector<int>& nums, int ...

junqing_wu的博客 529

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

前k个高频元素scala实现

文章目录 前言 一、前k个高频元素是什么? 二、具体实现 前言 用运Scala的语法实现前k个高频元素 一、前k个高频元素是什么? 给定一个非空的整数数组,返回其中出现频率前k高的元素。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] 二、使用步骤 代码如下: def topKFrequent(nums: Array[Int...

qq_42456324的博客 221

【LeetCode】347.前 K 个高频元素

给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。

Leonardo_t的博客 608

前k个高频元素(小顶堆实现)

通过哈希表(unordered_map)统计元素频率,然后传入小顶堆来实现前k个

Hhjhj255的博客 1056

栈与队列 8. 前 K 个高频元素(以及顶堆的一些操作)

思路:维护长度为k的小顶堆,每次push之后若超出长度,则pop堆顶元素。最后留下来的就是topk。

m0_49844155的博客 872
上一篇: 数组中的第K个最大元素
下一篇: 合并区间
rdc01234
博客等级 码龄9年 10粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值